openvpn-endpoint-server/server/app/api/auth.py

58 lines
1.6 KiB
Python

"""Authentication API routes."""
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from ..database import get_db
from ..schemas.user import UserLogin, Token, UserResponse
from ..services.auth_service import AuthService
from .deps import get_current_user
from ..models.user import User
router = APIRouter()
@router.post("/login", response_model=Token)
def login(
credentials: UserLogin,
db: Session = Depends(get_db)
):
"""Authenticate user and return JWT tokens."""
auth_service = AuthService(db)
user = auth_service.authenticate_user(credentials.username, credentials.password)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"}
)
return auth_service.create_tokens(user)
@router.post("/refresh", response_model=Token)
def refresh_token(
refresh_token: str,
db: Session = Depends(get_db)
):
"""Refresh access token using refresh token."""
auth_service = AuthService(db)
tokens = auth_service.refresh_tokens(refresh_token)
if not tokens:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid refresh token",
headers={"WWW-Authenticate": "Bearer"}
)
return tokens
@router.get("/me", response_model=UserResponse)
def get_current_user_info(
current_user: User = Depends(get_current_user)
):
"""Get current authenticated user information."""
return current_user