from fastapi import Depends, HTTPException, status from fastapi.security import OAuth2PasswordBearer from sqlalchemy.orm import Session from .database import get_db from .models import Role, User from .security import decode_access_token oauth2_scheme = OAuth2PasswordBearer(tokenUrl="auth/login") _credentials_exc = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Ungültige oder abgelaufene Anmeldung", headers={"WWW-Authenticate": "Bearer"}, ) def get_current_user( token: str = Depends(oauth2_scheme), db: Session = Depends(get_db) ) -> User: payload = decode_access_token(token) if payload is None: raise _credentials_exc username = payload.get("sub") if not username: raise _credentials_exc user = db.query(User).filter(User.username == username).first() if user is None: raise _credentials_exc return user def require_admin(current_user: User = Depends(get_current_user)) -> User: if current_user.role != Role.admin: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Nur Administratoren dürfen diese Aktion ausführen", ) return current_user