import uuid import jwt from fastapi import Depends, HTTPException, status from fastapi.security import OAuth2PasswordBearer from sqlmodel import Session, select from app.database import get_session from app.models.user import User from app.auth.jwt import decode_token oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login") async def get_current_user( token: str = Depends(oauth2_scheme), session: Session = 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(token) 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 (jwt.PyJWTError, ValueError): raise credentials_exception user = session.get(User, user_id) if user is None: raise credentials_exception return user