File size: 1,894 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
"""

VPN Authentication Manager

Handles authentication across different VPN protocols

"""
from typing import Optional, Tuple
from sqlalchemy.orm import Session
from .database import SessionLocal
from .services.user_service import UserService
from .models.user import User, UserStatus

class VPNAuthManager:
    def __init__(self):
        self._db = SessionLocal()
        self._user_service = UserService(self._db)
        
    async def authenticate(self, username: str, password: str, protocol: str, 

                         ip_address: str, device_info: str = None) -> Tuple[bool, str, Optional[str]]:
        """

        Authenticate user for VPN access

        Returns: (success, message, session_token)

        """
        # Authenticate user
        success, message, user = self._user_service.authenticate_user(username, password)
        if not success:
            return False, message, None
            
        # Create session if authentication successful
        session = self._user_service.create_session(user, ip_address, device_info)
        
        return True, "Authentication successful", session.token
        
    async def validate_session(self, token: str) -> Tuple[bool, str, Optional[User]]:
        """

        Validate a session token

        Returns: (success, message, user)

        """
        success, message, session = self._user_service.validate_session(token)
        if not success:
            return False, message, None
            
        # Get user
        user = self._db.query(User).filter(User.id == session.user_id).first()
        if not user or user.status != UserStatus.ACTIVE:
            return False, "User inactive or not found", None
            
        return True, "Session valid", user
        
    def close(self):
        """Close database connection"""
        self._db.close()