🔧 fix(service.py): add request parameter to run_oauth2_scheme method in AuthManager class to handle FastAPI request object

🔧 fix(utils.py): add request parameter to auth_scheme_dependency function to handle FastAPI request object
🔧 fix(utils.py): change get_current_active_user function to synchronous and remove async keyword
 feat(utils.py): add get_current_active_superuser function to check if the current user is an active superuser
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-08-25 10:11:24 -03:00
commit 4517f8ad5c
2 changed files with 21 additions and 10 deletions

View file

@ -1,3 +1,4 @@
from fastapi import Request
from langflow.services.base import Service
from typing import TYPE_CHECKING
@ -13,5 +14,5 @@ class AuthManager(Service):
# We need to define a function that can be passed to the Depends() function.
# This function will be called by FastAPI to run oauth2_scheme
def run_oauth2_scheme(self, *args, **kwargs):
return self.settings_manager.auth_settings.oauth2_scheme(*args, **kwargs)
def run_oauth2_scheme(self, request: Request):
return self.settings_manager.auth_settings.oauth2_scheme(request=request)

View file

@ -1,5 +1,5 @@
from datetime import datetime, timedelta, timezone
from fastapi import Depends, HTTPException, status
from fastapi import Depends, HTTPException, Request, status
from jose import JWTError, jwt
from typing import Annotated
from uuid import UUID
@ -14,12 +14,12 @@ from langflow.services.utils import get_session, get_settings_manager
from sqlalchemy.orm import Session
def auth_scheme_dependency(*args, **kwargs):
def auth_scheme_dependency(request: Request):
settings_manager = (
get_settings_manager()
) # Assuming get_settings_manager is defined
return AuthManager(settings_manager).run_oauth2_scheme(*args, **kwargs)
return AuthManager(settings_manager).run_oauth2_scheme(request)
async def get_current_user(
@ -35,7 +35,7 @@ async def get_current_user(
)
try:
payload = jwt.decode(
token,
await token,
settings_manager.auth_settings.SECRET_KEY,
algorithms=[settings_manager.auth_settings.ALGORITHM],
)
@ -48,19 +48,29 @@ async def get_current_user(
raise credentials_exception from e
user = get_user_by_id(db, user_id) # type: ignore
if user is None:
if user is None or not user.is_active:
raise credentials_exception
return user
async def get_current_active_user(
current_user: Annotated[User, Depends(get_current_user)]
):
def get_current_active_user(current_user: Annotated[User, Depends(get_current_user)]):
if not current_user.is_active:
raise HTTPException(status_code=400, detail="Inactive user")
return current_user
def get_current_active_superuser(
current_user: Annotated[User, Depends(get_current_user)]
) -> User:
if not current_user.is_active:
raise HTTPException(status_code=401, detail="Inactive user")
if not current_user.is_superuser:
raise HTTPException(
status_code=400, detail="The user doesn't have enough privileges"
)
return current_user
def verify_password(plain_password, hashed_password):
settings_manager = get_settings_manager()
return settings_manager.auth_settings.pwd_context.verify(