🔧 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:
parent
e4cbc0a07f
commit
4517f8ad5c
2 changed files with 21 additions and 10 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
from fastapi import Request
|
||||||
from langflow.services.base import Service
|
from langflow.services.base import Service
|
||||||
from typing import TYPE_CHECKING
|
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.
|
# 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
|
# This function will be called by FastAPI to run oauth2_scheme
|
||||||
def run_oauth2_scheme(self, *args, **kwargs):
|
def run_oauth2_scheme(self, request: Request):
|
||||||
return self.settings_manager.auth_settings.oauth2_scheme(*args, **kwargs)
|
return self.settings_manager.auth_settings.oauth2_scheme(request=request)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from datetime import datetime, timedelta, timezone
|
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 jose import JWTError, jwt
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
@ -14,12 +14,12 @@ from langflow.services.utils import get_session, get_settings_manager
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
|
|
||||||
def auth_scheme_dependency(*args, **kwargs):
|
def auth_scheme_dependency(request: Request):
|
||||||
settings_manager = (
|
settings_manager = (
|
||||||
get_settings_manager()
|
get_settings_manager()
|
||||||
) # Assuming get_settings_manager is defined
|
) # 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(
|
async def get_current_user(
|
||||||
|
|
@ -35,7 +35,7 @@ async def get_current_user(
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
payload = jwt.decode(
|
payload = jwt.decode(
|
||||||
token,
|
await token,
|
||||||
settings_manager.auth_settings.SECRET_KEY,
|
settings_manager.auth_settings.SECRET_KEY,
|
||||||
algorithms=[settings_manager.auth_settings.ALGORITHM],
|
algorithms=[settings_manager.auth_settings.ALGORITHM],
|
||||||
)
|
)
|
||||||
|
|
@ -48,19 +48,29 @@ async def get_current_user(
|
||||||
raise credentials_exception from e
|
raise credentials_exception from e
|
||||||
|
|
||||||
user = get_user_by_id(db, user_id) # type: ignore
|
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
|
raise credentials_exception
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
|
||||||
async def get_current_active_user(
|
def get_current_active_user(current_user: Annotated[User, Depends(get_current_user)]):
|
||||||
current_user: Annotated[User, Depends(get_current_user)]
|
|
||||||
):
|
|
||||||
if not current_user.is_active:
|
if not current_user.is_active:
|
||||||
raise HTTPException(status_code=400, detail="Inactive user")
|
raise HTTPException(status_code=400, detail="Inactive user")
|
||||||
return current_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):
|
def verify_password(plain_password, hashed_password):
|
||||||
settings_manager = get_settings_manager()
|
settings_manager = get_settings_manager()
|
||||||
return settings_manager.auth_settings.pwd_context.verify(
|
return settings_manager.auth_settings.pwd_context.verify(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue