tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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)