""" Authentication endpoints """ from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials from pydantic import BaseModel from services import auth as auth_service from models import Token router = APIRouter(prefix="/api/auth", tags=["auth"]) security = HTTPBearer() class LoginRequest(BaseModel): username: str password: str @router.post("/login", response_model=Token) async def login(request: LoginRequest): """ Login with username and password Returns JWT access token """ user = auth_service.authenticate_user(request.username, request.password) if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid credentials", headers={"WWW-Authenticate": "Bearer"}, ) access_token = auth_service.create_access_token(request.username) return {"access_token": access_token, "token_type": "bearer"} @router.post("/verify") async def verify_token(credentials: HTTPAuthorizationCredentials = Depends(security)): """ Verify JWT token validity """ token = credentials.credentials username = auth_service.verify_token(token) if not username: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token" ) return {"valid": True, "username": username}