JRNET / routers /vpn.py
Factor Studios
Upload 96 files
6a5b8d8 verified
"""
VPN server management routes
"""
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List
from core.auth import get_current_active_user
from core.database import get_db
from models.user import User
from schemas.vpn import (
VPNConfigResponse,
VPNSessionResponse,
VPNServerStats
)
from services.vpn_service import VPNService
router = APIRouter(
prefix="/vpn",
tags=["vpn"],
responses={404: {"description": "Not found"}}
)
@router.get("/config", response_model=VPNConfigResponse)
async def get_vpn_config(
current_user: User = Depends(get_current_active_user),
db: Session = Depends(get_db)
):
"""Get VPN configuration for current user"""
vpn_service = VPNService(db)
return await vpn_service.get_user_config(current_user.id)
@router.get("/sessions", response_model=List[VPNSessionResponse])
async def get_vpn_sessions(
current_user: User = Depends(get_current_active_user),
db: Session = Depends(get_db)
):
"""Get active VPN sessions for current user"""
vpn_service = VPNService(db)
return await vpn_service.get_user_sessions(current_user.id)
@router.get("/stats", response_model=VPNServerStats)
async def get_vpn_stats(
current_user: User = Depends(get_current_active_user),
db: Session = Depends(get_db)
):
"""Get VPN usage statistics for current user"""
vpn_service = VPNService(db)
return await vpn_service.get_user_stats(current_user.id)
@router.post("/disconnect/{session_id}")
async def disconnect_vpn_session(
session_id: str,
current_user: User = Depends(get_current_active_user),
db: Session = Depends(get_db)
):
"""Disconnect a specific VPN session"""
vpn_service = VPNService(db)
success = await vpn_service.disconnect_session(session_id, current_user.id)
if not success:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Session not found or already disconnected"
)
return {"status": "success", "message": "Session disconnected"}