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")