import uuid from fastapi import Depends, HTTPException, status from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer from jose import JWTError from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.auth.security import decode_token from app.database import get_session from app.models.user import User bearer_scheme = HTTPBearer() async def get_current_user( credentials: HTTPAuthorizationCredentials = Depends(bearer_scheme), session: AsyncSession = Depends(get_session), ) -> User: credentials_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Could not validate credentials", headers={"WWW-Authenticate": "Bearer"}, ) try: payload = decode_token(credentials.credentials) user_id_str: str | None = payload.get("sub") if user_id_str is None: raise credentials_exception user_id = uuid.UUID(user_id_str) except (JWTError, ValueError): raise credentials_exception result = await session.execute(select(User).where(User.id == user_id)) user = result.scalar_one_or_none() if user is None or not user.is_active: raise credentials_exception return user