tor-browser

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

image-with-headers-stash.py (1438B)


      1 # Supports two operations:
      2 # - ?image=uuid: Returns an image, and records the request headers that were
      3 #   used to get that image.
      4 # - ?read=uuid: Returns the request headers in the stash keyed by a given uuid.
      5 
      6 import os
      7 import json
      8 
      9 from wptserve.utils import isomorphic_decode
     10 
     11 def main(request, response):
     12  if b"image" in request.GET:
     13    uuid = request.GET[b"image"]
     14 
     15    header_pairs = []
     16    for header_name in request.headers.keys():
     17        # ensure the header name/value are unicode strings
     18        name = header_name.lower().decode("utf-8")
     19        for header_value in request.headers.get_list(header_name):
     20            value = header_value.decode("utf-8")
     21            header_pairs.append([name, value])
     22 
     23    request_headers = json.dumps(header_pairs)
     24    request.server.stash.put(uuid, request_headers)
     25 
     26    # Return a basic image.
     27    response_headers = [
     28      (b"Content-Type", b"image/png"),
     29      (b"Access-Control-Allow-Origin", b"*")
     30    ]
     31    image_path = os.path.join(
     32      os.path.dirname(isomorphic_decode(__file__)),
     33      u"../../../common/square.png"
     34    )
     35    return (200, response_headers, open(image_path, mode='rb').read())
     36 
     37  elif b"read" in request.GET:
     38    uuid = request.GET[b"read"]
     39    stash_value = request.server.stash.take(uuid)
     40 
     41    if stash_value is None:
     42      stash_value = "null"
     43    return (200, [(b"Content-Type", b"application/json")], str(stash_value))
     44 
     45  return (404 , [], "Not found")