summaryrefslogtreecommitdiff
path: root/app/routes/me.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/routes/me.py')
-rw-r--r--app/routes/me.py53
1 files changed, 33 insertions, 20 deletions
diff --git a/app/routes/me.py b/app/routes/me.py
index 03d0daa..65368e3 100644
--- a/app/routes/me.py
+++ b/app/routes/me.py
@@ -1,4 +1,4 @@
-from fastapi import APIRouter, Depends, HTTPException, Request
+from fastapi import APIRouter, Depends, Request
from sqlalchemy.ext.asyncio import AsyncSession
from app.auth.jwt import decode_token
@@ -11,30 +11,43 @@ 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:
- raise HTTPException(status_code=401, detail="Unauthorized")
+ return {"authenticated": False, "user": None}
- payload = decode_token(token)
- user_id = int(payload.get("sub"))
- user = await User.get_user_by_id(user_id, session=session)
+ 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}
- if not user:
- raise HTTPException(status_code=404, detail="User not found")
- if user.token_version != payload.get("token_version"):
- raise HTTPException(status_code=401, detail="Token revoked")
+ 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 user
+ # 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: User = Depends(get_current_user_from_cookie)):
- return {
- "id": user.id,
- "username": user.username,
- "email": user.email,
- "premium": user.premium,
- "is_banned": user.is_banned,
- "is_moderator": user.is_moderator,
- }
+async def read_current_user(
+ user_info: dict = Depends(get_current_user_from_cookie),
+):
+ # Directly return the dict to the frontend
+ return user_info