handle-headers-retry.py (1668B)
1 import importlib 2 header_helpers = importlib.import_module("storage-access-api.resources.header-helpers") 3 4 # Sets the `Activate-Storage-Access` response header to a `retry` value 5 # corresponding to the supplied `allowed_origin`. 6 def maybe_set_retry(allowed_origin, response): 7 if allowed_origin is None: 8 return 9 10 if allowed_origin == b'*': 11 retry_response = b'retry; allowed-origin=*' 12 elif allowed_origin == b'': 13 retry_response = b'retry' 14 else: 15 retry_response = b'retry; allowed-origin=\"' + allowed_origin + b'\"' 16 response.headers.set(b'Activate-Storage-Access', retry_response) 17 18 def main(request, response): 19 request_params = request.GET 20 if b'key' in request_params: 21 key = request_params.first(b'key') 22 # Do not handle requests without a key parameter. 23 else: 24 return (400, [], b'') 25 26 allowed_origin = request_params.first(b'retry-allowed-origin', None) 27 storage_access_status = request.headers.get(b'sec-fetch-storage-access') 28 29 # If a request has been successfully retried and set to active, store its 30 # headers under a modified key so they can be retrieved independently of 31 # the initial request's headers. 32 if storage_access_status == b'active': 33 key += b'active' 34 maybe_set_retry(allowed_origin, response) 35 36 # Check if the request should redirect. 37 header_helpers.maybe_set_redirect(request_params, response, storage_access_status) 38 39 request.server.stash.put(header_helpers.make_stash_key(key, request_params), 40 header_helpers.get_stashable_headers(request.headers), 41 header_helpers.RETRIEVAL_PATH) 42 43 return header_helpers.make_response_body(request_params)