|
|
from fastapi import Depends, HTTPException, status |
|
|
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials |
|
|
from typing import Optional |
|
|
|
|
|
from models.user import User |
|
|
from utils.jwt_utils import is_authenticated |
|
|
|
|
|
|
|
|
security = HTTPBearer() |
|
|
|
|
|
def get_current_user(credentials: HTTPAuthorizationCredentials = Depends(security)) -> Optional[User]: |
|
|
""" |
|
|
Dependency to get the current authenticated user from the JWT token |
|
|
""" |
|
|
token = credentials.credentials |
|
|
user = is_authenticated(token) |
|
|
|
|
|
if user is None: |
|
|
raise HTTPException( |
|
|
status_code=status.HTTP_401_UNAUTHORIZED, |
|
|
detail="Could not validate credentials", |
|
|
headers={"WWW-Authenticate": "Bearer"}, |
|
|
) |
|
|
|
|
|
return user |
|
|
|
|
|
def get_optional_user(credentials: HTTPAuthorizationCredentials = Depends(security)) -> Optional[User]: |
|
|
""" |
|
|
Dependency to get the current user if authenticated, or return None |
|
|
""" |
|
|
token = credentials.credentials |
|
|
user = is_authenticated(token) |
|
|
|
|
|
return user |