11from collections import OrderedDict
22
33from bson .objectid import ObjectId
4- from sanic .response import json
54from jwt import InvalidIssuedAtError , ExpiredSignatureError , InvalidTokenError
5+ from sage_utils .constants import VALIDATION_ERROR , NOT_FOUND_ERROR , TOKEN_ERROR
6+ from sage_utils .wrappers import Response
7+ from sanic .response import json
68
7- from app .generic .utils import CONTENT_FIELD_NAME , TOKEN_ERROR , VALIDATION_ERROR , \
8- NOT_FOUND_ERROR , wrap_error
99from app .token .exceptions import MissingAuthorizationHeader , InvalidHeaderPrefix
1010from app .token .json_web_token import build_payload , generate_token_pair , extract_token , \
1111 decode_token , extract_and_decode_token , get_redis_key_by_user , generate_access_token
1616async def generate_tokens (request ):
1717 credentials = LoginSchema ().load (request .json or {})
1818 if credentials .errors :
19- return json (wrap_error (VALIDATION_ERROR , credentials .errors ), 400 )
19+ response = Response .from_error (VALIDATION_ERROR , credentials .errors )
20+ response .data .pop (Response .EVENT_FIELD_NAME , None )
21+ return json (response .data , 400 )
2022
2123 username = credentials .data ["username" ]
2224 password = credentials .data ["password" ]
2325
2426 user_document = request .app .config ["LAZY_UMONGO" ].User
2527 user = await user_document .find_one ({"username" : username })
2628 if not user or (user and not user .verify_password (password )):
27- message = wrap_error (
29+ response = Response . from_error (
2830 NOT_FOUND_ERROR ,
2931 "User wasn't found or specified an invalid password."
3032 )
31- return json (message , 400 )
33+ response .data .pop (Response .EVENT_FIELD_NAME , None )
34+ return json (response .data , 400 )
3235
3336 payload = build_payload (request .app , extra_data = {"user_id" : str (user .pk )})
3437 response = await generate_token_pair (request , payload , user .username )
@@ -39,9 +42,11 @@ async def verify_token(request):
3942 try :
4043 raw_access_token = extract_token (request )
4144 except (MissingAuthorizationHeader , InvalidHeaderPrefix ) as exc :
42- result = OrderedDict ({"is_valid" : False })
43- result .update (exc .details )
44- return json (result , status = exc .status_code )
45+ error = exc .details
46+ error .pop (Response .EVENT_FIELD_NAME , None )
47+ response = OrderedDict ({"is_valid" : False })
48+ response .update (error )
49+ return json (response , status = exc .status_code )
4550
4651 secret = request .app .config ["JWT_SECRET_KEY" ]
4752 algorithm = request .app .config ["JWT_ALGORITHM" ]
@@ -54,16 +59,20 @@ async def verify_token(request):
5459 except (InvalidIssuedAtError , ExpiredSignatureError ) as exc :
5560 is_valid = False
5661 status_code = 400
57- error = wrap_error (TOKEN_ERROR , str (exc ))
62+ error = Response . from_error (TOKEN_ERROR , str (exc ))
5863 except InvalidTokenError as exc :
5964 is_valid = False
6065 status_code = 400
61- error = wrap_error (TOKEN_ERROR , str (exc ))
66+ error = Response . from_error (TOKEN_ERROR , str (exc ))
6267
63- response = OrderedDict ({CONTENT_FIELD_NAME : "OK" , "is_valid" : is_valid })
68+ response = OrderedDict ({
69+ Response .CONTENT_FIELD_NAME : "OK" ,
70+ "is_valid" : is_valid
71+ })
6472 if error :
65- response .pop (CONTENT_FIELD_NAME , None )
66- response .update (error )
73+ error .data .pop (Response .EVENT_FIELD_NAME )
74+ response .pop (Response .CONTENT_FIELD_NAME , None )
75+ response .update (error .data )
6776
6877 return json (response , status = status_code )
6978
@@ -72,13 +81,19 @@ async def refresh_token_pairs(request):
7281 try :
7382 token = extract_and_decode_token (request )
7483 except (MissingAuthorizationHeader , InvalidHeaderPrefix ) as exc :
75- return json (exc .details , status = exc .status_code )
84+ response = exc .details
85+ response .pop (Response .EVENT_FIELD_NAME , None )
86+ return json (response , status = exc .status_code )
7687 except InvalidTokenError as exc :
77- return json (wrap_error (TOKEN_ERROR , str (exc )), status = 400 )
88+ response = Response .from_error (TOKEN_ERROR , str (exc ))
89+ response .data .pop (Response .EVENT_FIELD_NAME , None )
90+ return json (response .data , status = 400 )
7891
7992 request_body = RefreshTokenSchema ().load (request .json or {})
8093 if request_body .errors :
81- return json (wrap_error (TOKEN_ERROR , request_body .errors ), 400 )
94+ response = Response .from_error (TOKEN_ERROR , request_body .errors )
95+ response .data .pop (Response .EVENT_FIELD_NAME , None )
96+ return json (response .data , 400 )
8297
8398 user_id = token .get ('user_id' , None )
8499 user_document = request .app .config ["LAZY_UMONGO" ].User
@@ -89,11 +104,12 @@ async def refresh_token_pairs(request):
89104 existing_refresh_token = await get_refresh_token_from_redis (request .app .redis , key )
90105
91106 if not user or (user and existing_refresh_token != refresh_token ):
92- message = wrap_error (
107+ response = Response . from_error (
93108 TOKEN_ERROR ,
94109 "User wasn't found or specified an invalid `refresh_token`."
95110 )
96- return json (message , 400 )
111+ response .data .pop (Response .EVENT_FIELD_NAME , None )
112+ return json (response .data , 400 )
97113
98114 secret = request .app .config ["JWT_SECRET_KEY" ]
99115 algorithm = request .app .config ["JWT_ALGORITHM" ]
0 commit comments