from fastapi import Depends, HTTPException, status from fastapi.security import OAuth2PasswordBearer from jose import JWTError, jwt from sqlalchemy.orm import Session from api import models from api.database import get_db import os SECRET_KEY = os.getenv("JWT_SECRET", "your-secret-key") ALGORITHM = "HS256" oauth2_scheme = OAuth2PasswordBearer(tokenUrl="auth/login") def get_current_user(token: str = Depends(oauth2_scheme), db: Session = Depends(get_db)) -> models.User: credentials_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Could not validate credentials", headers={"WWW-Authenticate": "Bearer"}, ) try: payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) user_id = payload.get("sub") if user_id is None: raise credentials_exception user_id = int(user_id) except (JWTError, ValueError, TypeError): raise credentials_exception user = db.query(models.User).filter(models.User.id == user_id).first() if user is None: raise credentials_exception return user