dialexus-chat / app /security /dependencies.py
AP314159's picture
initial commit
9b87a98
from fastapi import Depends, HTTPException, status, Request
from sqlalchemy.orm import Session
from typing import Union
from app.db.session import get_db
from app.security.jwt import verify_token
from app.models import User, Admin, SuperAdmin
def get_current_user_from_cookie(request: Request, db: Session = Depends(get_db)) -> Union[User, Admin, SuperAdmin]:
"""
New primary dependency to get the current user from the access_token cookie.
"""
credentials_exception = HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Could not validate credentials",
headers={"WWW-Authenticate": "Bearer"},
)
token = request.cookies.get("access_token")
if token is None:
raise credentials_exception
token_data = verify_token(token, credentials_exception)
# Based on the role in the token, fetch from the correct table
role = token_data.role
username = token_data.username
user = None
if role == "user":
user = db.query(User).filter(User.username == username).first()
elif role == "admin":
user = db.query(Admin).filter(Admin.username == username).first()
elif role == "super_admin":
user = db.query(SuperAdmin).filter(SuperAdmin.username == username).first()
if user is None:
raise credentials_exception
return user