| from fastapi import Request, HTTPException, status, Depends |
| from sqlalchemy.ext.asyncio import AsyncSession |
| from sqlalchemy import select |
| from app.features.auth.models import User |
| from app.core.database import get_db |
|
|
| async def get_current_user(request: Request, db: AsyncSession = Depends(get_db)) -> User: |
| |
| if hasattr(request.state, "user") and request.state.user: |
| return request.state.user |
|
|
| |
| if not hasattr(request.state, "user_email") or not request.state.user_email: |
| raise HTTPException( |
| status_code=status.HTTP_401_UNAUTHORIZED, |
| detail="Authentication required" |
| ) |
| |
| |
| result = await db.execute(select(User).where(User.email == request.state.user_email)) |
| user = result.scalar_one_or_none() |
| |
| if not user: |
| raise HTTPException( |
| status_code=status.HTTP_401_UNAUTHORIZED, |
| detail="User not found" |
| ) |
| |
| if not user.is_active: |
| raise HTTPException( |
| status_code=status.HTTP_400_BAD_REQUEST, |
| detail="Inactive user" |
| ) |
|
|
| |
| request.state.user = user |
| return user |
|
|