diff --git a/backend/auth.py b/backend/auth.py index 37e5f27..e23e391 100644 --- a/backend/auth.py +++ b/backend/auth.py @@ -59,3 +59,26 @@ async def get_current_superuser(current_user: User = Depends(get_current_user)): detail="The user doesn't have enough privileges" ) return current_user + + +# Optional OAuth scheme that doesn't require auth +oauth2_scheme_optional = OAuth2PasswordBearer(tokenUrl="auth/token", auto_error=False) + +async def get_current_user_optional( + token: Optional[str] = Depends(oauth2_scheme_optional), + session: Session = Depends(get_session) +) -> Optional[User]: + """Get current user if authenticated, otherwise return None (for public endpoints)""" + if not token: + return None + try: + payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) + email: str = payload.get("sub") + if email is None: + return None + except JWTError: + return None + + user = session.exec(select(User).where(User.email == email)).first() + return user +