from fastapi import APIRouter, Depends, Request from sqlalchemy.ext.asyncio import AsyncSession from app.auth.jwt import decode_token from app.models.user import User from app.utils.db import get_async_session router = APIRouter(tags=["auth"]) async def get_current_user_from_cookie( request: Request, session: AsyncSession = Depends(get_async_session), ) -> dict: token = request.cookies.get("access_token") if not token: return {"authenticated": False, "user": None} try: payload = decode_token(token) sub = payload.get("sub") if sub is None: return {"authenticated": False, "user": None} user_id = int(sub) except ValueError, TypeError: return {"authenticated": False, "user": None} user = await User.get_user_by_id(user_id, session=session) if not user or user.token_version != payload.get("token_version"): return {"authenticated": False, "user": None} # Return authenticated user return { "authenticated": True, "user": { "id": user.id, "username": user.username, "password": user.has_password, "google_id": user.google_id, "email": user.email, "premium": user.premium, "is_banned": user.is_banned, "is_moderator": user.is_moderator, }, } @router.get("/me") async def read_current_user( user_info: dict = Depends(get_current_user_from_cookie), ): # Directly return the dict to the frontend return user_info