JRNET / core /vpn_auth.py
Factor Studios
Upload 96 files
6a5b8d8 verified
"""
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()