""" FastAPI authentication dependencies. Provides dependency functions for securing REST endpoints with Azure AD token verification. """ from typing import Optional from fastapi import Header, HTTPException, status from app.services.auth_service import verify_access_token async def get_current_user(authorization: Optional[str] = Header(None)) -> dict: """ FastAPI dependency to verify the access token and return user claims. Use as a dependency on protected endpoints: @app.get("/protected") async def protected_route(user: dict = Depends(get_current_user)): return {"message": f"Hello {user.get('name')}"} Args: authorization: The Authorization header value (Bearer ) Returns: The token claims dict containing user information Raises: HTTPException: 401 if token is missing or invalid """ if not authorization: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Missing authorization header", headers={"WWW-Authenticate": "Bearer"}, ) # Extract token from "Bearer " format parts = authorization.split() if len(parts) != 2 or parts[0].lower() != "bearer": raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid authorization header format. Expected: Bearer ", headers={"WWW-Authenticate": "Bearer"}, ) token = parts[1] claims = await verify_access_token(token) if not claims: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid or expired token", headers={"WWW-Authenticate": "Bearer"}, ) return claims