1111 Request
1212)
1313
14+ from app .api .exceptions import credentials_exception , privileges_exception
1415from app .core .database import async_get_db
16+ from app .core .logger import logging
1517from app .core .models import TokenData
1618from app .core .rate_limit import is_rate_limited
17- from app .core .logger import logging
18- from app .models .user import User
19- from app .api .exceptions import credentials_exception , privileges_exception
20- from app .crud .crud_users import crud_users
21- from app .crud .crud_tier import crud_tiers
19+ from app .core .security import verify_token
2220from app .crud .crud_rate_limit import crud_rate_limits
21+ from app .crud .crud_tier import crud_tiers
22+ from app .crud .crud_users import crud_users
23+ from app .models .user import User
2324from app .schemas .rate_limit import sanitize_path
2425
25-
2626logger = logging .getLogger (__name__ )
2727
2828DEFAULT_LIMIT = settings .DEFAULT_RATE_LIMIT_LIMIT
3131async def get_current_user (
3232 token : Annotated [str , Depends (oauth2_scheme )],
3333 db : Annotated [AsyncSession , Depends (async_get_db )]
34- ) -> User :
34+ ) -> dict :
3535 try :
3636 payload = jwt .decode (token , SECRET_KEY , algorithms = [ALGORITHM ])
3737 username_or_email : str = payload .get ("sub" )
@@ -53,10 +53,29 @@ async def get_current_user(
5353 raise credentials_exception
5454
5555
56+ async def get_current_user (
57+ token : Annotated [str , Depends (oauth2_scheme )],
58+ db : Annotated [AsyncSession , Depends (async_get_db )]
59+ ) -> dict :
60+ token_data = await verify_token (token , db )
61+ if token_data is None :
62+ raise credentials_exception
63+
64+ if "@" in token_data .username_or_email :
65+ user = await crud_users .get (db = db , email = token_data .username_or_email , is_deleted = False )
66+ else :
67+ user = await crud_users .get (db = db , username = token_data .username_or_email , is_deleted = False )
68+
69+ if user :
70+ return user
71+
72+ raise credentials_exception
73+
74+
5675async def get_optional_user (
5776 request : Request ,
5877 db : AsyncSession = Depends (async_get_db )
59- ) -> User | None :
78+ ) -> dict | None :
6079 token = request .headers .get ("Authorization" )
6180 if not token :
6281 return None
@@ -66,7 +85,11 @@ async def get_optional_user(
6685 if token_type .lower () != 'bearer' or not token_value :
6786 return None
6887
69- return await get_current_user (token_value , db )
88+ token_data = await verify_token (token_value , db )
89+ if token_data is None :
90+ return None
91+
92+ return await get_current_user (token_value , is_deleted = False , db = db )
7093
7194 except HTTPException as http_exc :
7295 if http_exc .status_code != 401 :
@@ -75,10 +98,10 @@ async def get_optional_user(
7598
7699 except Exception as exc :
77100 logger .error (f"Unexpected error in get_optional_user: { exc } " )
78- return None
101+ return None
79102
80103
81- async def get_current_superuser (current_user : Annotated [User , Depends (get_current_user )]) -> User :
104+ async def get_current_superuser (current_user : Annotated [User , Depends (get_current_user )]) -> dict :
82105 if not current_user ["is_superuser" ]:
83106 raise privileges_exception
84107
0 commit comments