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"}