How to use requests_error_response_xml_signature_calculation method in localstack

Best Python code snippet using localstack_python

s3_utils.py

Source:s3_utils.py Github

copy

Full Screen

...238 if query_string239 else request_dict["url"]240 )241 if not is_v2 and any([p in query_params for p in SIGNATURE_V2_PARAMS]):242 response = requests_error_response_xml_signature_calculation(243 code=403,244 message="Query-string authentication requires the Signature, Expires and AWSAccessKeyId parameters",245 code_string="AccessDenied",246 )247 elif is_v2 and not is_v4:248 response = authenticate_presign_url_signv2(249 method, path, headers, data, url, query_params, request_dict250 )251 if not is_v4 and any([p in query_params for p in SIGNATURE_V4_PARAMS]):252 response = requests_error_response_xml_signature_calculation(253 code=403,254 message="Query-string authentication requires the X-Amz-Algorithm, \255 X-Amz-Credential, X-Amz-Date, X-Amz-Expires, \256 X-Amz-SignedHeaders and X-Amz-Signature parameters.",257 code_string="AccessDenied",258 )259 elif is_v4 and not is_v2:260 response = authenticate_presign_url_signv4(261 method, path, headers, data, url, query_params, request_dict262 )263 if response is not None:264 LOGGER.info("Presign signature calculation failed: %s" % response)265 return response266 LOGGER.debug("Valid presign url.")267def authenticate_presign_url_signv2(method, path, headers, data, url, query_params, request_dict):268 # Calculating Signature269 aws_request = create_request_object(request_dict)270 credentials = Credentials(271 access_key=TEST_AWS_ACCESS_KEY_ID,272 secret_key=TEST_AWS_SECRET_ACCESS_KEY,273 token=query_params.get("X-Amz-Security-Token", None),274 )275 auth = HmacV1QueryAuth(credentials=credentials, expires=query_params["Expires"][0])276 split = urlsplit(aws_request.url)277 string_to_sign = auth.get_string_to_sign(278 method=method, split=split, headers=aws_request.headers279 )280 signature = auth.get_signature(string_to_sign=string_to_sign)281 # Comparing the signature in url with signature we calculated282 query_sig = urlparse.unquote(query_params["Signature"][0])283 if config.S3_SKIP_SIGNATURE_VALIDATION:284 if query_sig != signature:285 LOGGER.warning(286 "Signatures do not match, but not raising an error, as S3_SKIP_SIGNATURE_VALIDATION=1"287 )288 signature = query_sig289 if query_sig != signature:290 return requests_error_response_xml_signature_calculation(291 code=403,292 code_string="SignatureDoesNotMatch",293 aws_access_token=TEST_AWS_ACCESS_KEY_ID,294 string_to_sign=string_to_sign,295 signature=signature,296 message="The request signature we calculated does not match the signature you provided. \297 Check your key and signing method.",298 )299 # Checking whether the url is expired or not300 if int(query_params["Expires"][0]) < time.time():301 return requests_error_response_xml_signature_calculation(302 code=403,303 code_string="AccessDenied",304 message="Request has expired",305 expires=query_params["Expires"][0],306 )307def authenticate_presign_url_signv4(method, path, headers, data, url, query_params, request_dict):308 is_presign_valid = False309 for port in PORT_REPLACEMENT:310 match = re.match(HOST_COMBINATION_REGEX, urlparse.urlparse(request_dict["url"]).netloc)311 if match and match.group(2):312 request_dict["url"] = request_dict["url"].replace("%s" % match.group(2), "%s" % port)313 else:314 request_dict["url"] = "%s:%s" % (request_dict["url"], port)315 # Calculating Signature316 aws_request = create_request_object(request_dict)317 ReadOnlyCredentials = namedtuple(318 "ReadOnlyCredentials", ["access_key", "secret_key", "token"]319 )320 credentials = ReadOnlyCredentials(321 TEST_AWS_ACCESS_KEY_ID,322 TEST_AWS_SECRET_ACCESS_KEY,323 query_params.get("X-Amz-Security-Token", None),324 )325 region = query_params["X-Amz-Credential"][0].split("/")[2]326 signer = S3SigV4QueryAuth(327 credentials, "s3", region, expires=int(query_params["X-Amz-Expires"][0])328 )329 signature = signer.add_auth(aws_request, query_params["X-Amz-Date"][0])330 expiration_time = datetime.datetime.strptime(331 query_params["X-Amz-Date"][0], "%Y%m%dT%H%M%SZ"332 ) + datetime.timedelta(seconds=int(query_params["X-Amz-Expires"][0]))333 expiration_time = expiration_time.replace(tzinfo=datetime.timezone.utc)334 # Comparing the signature in url with signature we calculated335 query_sig = urlparse.unquote(query_params["X-Amz-Signature"][0])336 if query_sig == signature:337 is_presign_valid = True338 break339 # Comparing the signature in url with signature we calculated340 if config.S3_SKIP_SIGNATURE_VALIDATION:341 if not is_presign_valid:342 LOGGER.warning(343 "Signatures do not match, but not raising an error, as S3_SKIP_SIGNATURE_VALIDATION=1"344 )345 signature = query_sig346 is_presign_valid = True347 if not is_presign_valid:348 return requests_error_response_xml_signature_calculation(349 code=403,350 code_string="SignatureDoesNotMatch",351 aws_access_token=TEST_AWS_ACCESS_KEY_ID,352 signature=signature,353 message="The request signature we calculated does not match the signature you provided. \354 Check your key and signing method.",355 )356 # Checking whether the url is expired or not357 if is_expired(expiration_time):358 return requests_error_response_xml_signature_calculation(359 code=403,360 code_string="AccessDenied",361 message="Request has expired",362 expires=query_params["X-Amz-Expires"][0],...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run localstack automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful