from fastapi import Depends, HTTPException, status from fastapi.security import OAuth2PasswordBearer from sqlalchemy.orm import Session from . import models from .database import get_db from .security import decode_access_token oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login") def get_current_user( token: str = Depends(oauth2_scheme), db: Session = Depends(get_db) ) -> models.User: """Возвращает активного пользователя по Bearer JWT.""" credentials_error = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Не удалось подтвердить учётные данные", headers={"WWW-Authenticate": "Bearer"}, ) payload = decode_access_token(token) if not payload or not payload.get("sub"): raise credentials_error try: user_id = int(payload["sub"]) except (TypeError, ValueError): raise credentials_error user = db.get(models.User, user_id) if user is None or not user.is_active: raise credentials_error return user