Spaces:
Runtime error
Runtime error
| """ | |
| 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() | |