22import hmac
33import logging
44from datetime import datetime
5- from typing import Optional
6-
7- from httpx import Response , Request
85
96from saic_ismart_client_ng .crypto_utils import md5_hex_digest , encrypt_aes_cbc_pkcs5_padding , \
107 decrypt_aes_cbc_pkcs5_padding
11- from saic_ismart_client_ng .net .utils import update_request_with_content , normalize_content_type
8+ from saic_ismart_client_ng .net .utils import normalize_content_type
129
1310logger = logging .getLogger (__name__ )
1411
@@ -50,26 +47,28 @@ def get_app_verification_string(
5047 return ""
5148
5249
53- async def encrypt_request (
50+ def encrypt_request (
5451 * ,
55- modified_request : Request ,
52+ original_request_url : str ,
53+ original_request_headers : dict ,
54+ original_request_content : str ,
5655 request_timestamp : datetime ,
5756 base_uri : str ,
5857 region : str ,
5958 tenant_id : str ,
6059 user_token : str = "" ,
6160 class_name : str = "" ,
62- ):
63- original_request_url = modified_request .url
64- original_content_type = modified_request .headers .get ("Content-Type" ) # 'application/x-www-form-urlencoded'
61+ ) -> (str , dict ):
62+ original_content_type = original_request_headers .get ("Content-Type" ) # 'application/x-www-form-urlencoded'
6563 if not original_content_type :
6664 modified_content_type = "application/json"
6765 else :
6866 modified_content_type = original_content_type # 'application/x-www-form-urlencoded'
6967 request_content = ""
7068 current_ts = str (int (request_timestamp .timestamp () * 1000 ))
7169 request_path = str (original_request_url ).replace (base_uri , "/" )
72- request_body = modified_request .content .decode ("utf-8" )
70+ request_body = original_request_content
71+ new_content = original_request_content
7372 if request_body and "multipart" not in original_content_type :
7473 modified_content_type = normalize_content_type (original_content_type )
7574 request_content = request_body .strip ()
@@ -84,23 +83,21 @@ async def encrypt_request(
8483 iv_hex = md5_hex_digest (current_ts , False )
8584 if key_hex and iv_hex :
8685 new_content = encrypt_aes_cbc_pkcs5_padding (request_content , key_hex , iv_hex ).encode ('utf-8' )
87- # Update the request content
88- update_request_with_content (modified_request , new_content )
8986
90- modified_request . headers ["User-Agent" ] = "okhttp/3.14.9"
91- modified_request . headers ["Content-Type" ] = f"{ modified_content_type } ;charset=utf-8"
92- modified_request . headers ["Accept" ] = "application/json"
93- modified_request . headers ["Accept-Encoding" ] = "gzip"
87+ original_request_headers ["User-Agent" ] = "okhttp/3.14.9"
88+ original_request_headers ["Content-Type" ] = f"{ modified_content_type } ;charset=utf-8"
89+ original_request_headers ["Accept" ] = "application/json"
90+ original_request_headers ["Accept-Encoding" ] = "gzip"
9491
95- modified_request . headers ["REGION" ] = region
92+ original_request_headers ["REGION" ] = region
9693
97- modified_request . headers ["APP-SEND-DATE" ] = current_ts
98- modified_request . headers ["APP-CONTENT-ENCRYPTED" ] = "1"
99- modified_request . headers ["tenant-id" ] = tenant_id
100- modified_request . headers ["User-Type" ] = "app"
101- modified_request . headers ["APP-LANGUAGE-TYPE" ] = "en"
94+ original_request_headers ["APP-SEND-DATE" ] = current_ts
95+ original_request_headers ["APP-CONTENT-ENCRYPTED" ] = "1"
96+ original_request_headers ["tenant-id" ] = tenant_id
97+ original_request_headers ["User-Type" ] = "app"
98+ original_request_headers ["APP-LANGUAGE-TYPE" ] = "en"
10299 if user_token :
103- modified_request . headers ["blade-auth" ] = user_token
100+ original_request_headers ["blade-auth" ] = user_token
104101 app_verification_string = get_app_verification_string (
105102 class_name ,
106103 request_path ,
@@ -110,20 +107,27 @@ async def encrypt_request(
110107 request_content ,
111108 user_token
112109 )
113- modified_request .headers ["ORIGINAL-CONTENT-TYPE" ] = modified_content_type
114- modified_request .headers ["APP-VERIFICATION-STRING" ] = app_verification_string
110+ original_request_headers ["ORIGINAL-CONTENT-TYPE" ] = modified_content_type
111+ original_request_headers ["APP-VERIFICATION-STRING" ] = app_verification_string
112+ return new_content , original_request_headers
115113
116114
117- async def decrypt_request (req : Request , base_uri : str ):
115+ def decrypt_request (
116+ * ,
117+ original_request_url : str ,
118+ original_request_headers : dict ,
119+ original_request_content : str ,
120+ base_uri : str ,
121+ ) -> bytes :
118122 charset = 'utf-8'
119- req_content = ( await req . aread ()). decode ( charset ) .strip ()
123+ req_content = original_request_content .strip ()
120124 if req_content :
121- app_send_date = req . headers .get ("APP-SEND-DATE" )
122- original_content_type = req . headers .get ("ORIGINAL-CONTENT-TYPE" )
125+ app_send_date = original_request_headers .get ("APP-SEND-DATE" )
126+ original_content_type = original_request_headers .get ("ORIGINAL-CONTENT-TYPE" )
123127 if app_send_date and original_content_type :
124- tenant_id = req . headers ['tenant-id' ]
125- user_token = req . headers .get ('blade-auth' , '' )
126- request_path = str ( req . url ) .replace (base_uri , "/" )
128+ tenant_id = original_request_headers ['tenant-id' ]
129+ user_token = original_request_headers .get ('blade-auth' , '' )
130+ request_path = original_request_url .replace (base_uri , "/" )
127131 key = md5_hex_digest (
128132 md5_hex_digest (
129133 request_path + tenant_id + user_token + "app" ,
@@ -135,23 +139,26 @@ async def decrypt_request(req: Request, base_uri: str):
135139 decrypted = decrypt_aes_cbc_pkcs5_padding (req_content , key , iv )
136140 if decrypted :
137141 return decrypted .encode (charset )
138- return req_content
139-
140-
141- async def decrypt_response (resp : Response ):
142- if resp .is_success :
143- charset = resp .encoding
144- resp_content = (await resp .aread ()).decode (charset ).strip ()
145- if resp_content :
146- app_send_date = resp .headers .get ("APP-SEND-DATE" )
147- original_content_type = resp .headers .get ("ORIGINAL-CONTENT-TYPE" )
148- if app_send_date and original_content_type :
149- original_response_key = app_send_date + "1" + original_content_type
150- key = md5_hex_digest (original_response_key , False ) if len (original_response_key ) > 0 else ""
151- iv = md5_hex_digest (app_send_date , False )
152- decrypted = decrypt_aes_cbc_pkcs5_padding (resp_content , key , iv )
153- if decrypted :
154- resp ._content = decrypted .encode (charset )
155- resp .headers ["Content-Length" ] = str (len (resp ._content ))
156- resp .headers ["Content-Type" ] = original_content_type
157- return resp
142+ return original_request_content .encode (charset )
143+
144+
145+ def decrypt_response (
146+ * ,
147+ original_response_content : str ,
148+ original_response_headers : dict ,
149+ original_response_charset : str ,
150+ ) -> (bytes , dict ):
151+ resp_content = original_response_content .strip ()
152+ if resp_content :
153+ app_send_date = original_response_headers .get ("APP-SEND-DATE" )
154+ original_content_type = original_response_headers .get ("ORIGINAL-CONTENT-TYPE" )
155+ if app_send_date and original_content_type :
156+ original_response_key = app_send_date + "1" + original_content_type
157+ key = md5_hex_digest (original_response_key , False ) if len (original_response_key ) > 0 else ""
158+ iv = md5_hex_digest (app_send_date , False )
159+ decrypted = decrypt_aes_cbc_pkcs5_padding (resp_content , key , iv )
160+ if decrypted :
161+ resp_content = decrypted
162+ original_response_headers ["Content-Type" ] = original_content_type
163+
164+ return resp_content .encode (original_response_charset ), original_response_headers
0 commit comments