Spaces:
Sleeping
Sleeping
from datetime import datetime | |
from typing import Annotated | |
from fastapi import Depends, Header | |
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer | |
from sqlalchemy.ext.asyncio import AsyncSession | |
from sqlalchemy.orm.exc import NoResultFound | |
from reworkd_platform.db.crud.user import UserCrud | |
from reworkd_platform.db.dependencies import get_db_session | |
from reworkd_platform.schemas.user import UserBase | |
from reworkd_platform.web.api.http_responses import forbidden | |
def user_crud( | |
session: AsyncSession = Depends(get_db_session), | |
) -> UserCrud: | |
return UserCrud(session) | |
async def get_current_user( | |
x_organization_id: Annotated[str | None, Header()] = None, | |
bearer: HTTPAuthorizationCredentials = Depends(HTTPBearer()), | |
crud: UserCrud = Depends(user_crud), | |
) -> UserBase: | |
session_token = bearer.credentials | |
try: | |
session = await crud.get_user_session(session_token) | |
except NoResultFound: | |
raise forbidden("Invalid session token") | |
if session.expires <= datetime.utcnow(): | |
raise forbidden("Session token expired") | |
return UserBase( | |
id=session.user.id, | |
name=session.user.name, | |
email=session.user.email, | |
image=session.user.image, | |
) | |