Spaces:
Sleeping
Sleeping
File size: 1,422 Bytes
ed5cf78 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | from datetime import datetime
from fastapi import Depends, HTTPException, status
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
from src.database import get_session
from src.models import User, Session
security = HTTPBearer()
async def get_current_user(auth: HTTPAuthorizationCredentials = Depends(security), session: AsyncSession = Depends(get_session)) -> User:
token = auth.credentials
# Query Better Auth session table
stmt = select(Session).where(Session.token == token)
result = await session.execute(stmt)
db_session = result.scalars().first()
if not db_session:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid session token",
headers={"WWW-Authenticate": "Bearer"},
)
if db_session.expiresAt < datetime.utcnow():
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Session expired",
headers={"WWW-Authenticate": "Bearer"},
)
user = await session.get(User, db_session.userId)
if user is None:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="User not found",
headers={"WWW-Authenticate": "Bearer"},
)
return user
|