Spaces:
Runtime error
Runtime error
File size: 2,167 Bytes
6a5b8d8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
"""
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"}
|