OLD | NEW |
(Empty) | |
| 1 import os, sys, json, urlparse, urllib |
| 2 |
| 3 def get_template(template_basename): |
| 4 script_directory = os.path.dirname(os.path.abspath(__file__)) |
| 5 template_directory = os.path.abspath(os.path.join(script_directory, |
| 6 "..", |
| 7 "template")) |
| 8 template_filename = os.path.join(template_directory, template_basename); |
| 9 |
| 10 with open(template_filename, "r") as f: |
| 11 return f.read() |
| 12 |
| 13 # TODO(kristijanburnik): subdomain_prefix is a hardcoded value aligned with |
| 14 # referrer-policy-test-case.js. The prefix should be configured in one place. |
| 15 def get_swapped_origin_netloc(netloc, subdomain_prefix = "www1."): |
| 16 if netloc.startswith(subdomain_prefix): |
| 17 return netloc[len(subdomain_prefix):] |
| 18 else: |
| 19 return subdomain_prefix + netloc |
| 20 |
| 21 def create_redirect_url(request, cross_origin = False): |
| 22 parsed = urlparse.urlsplit(request.url) |
| 23 destination_netloc = parsed.netloc |
| 24 if cross_origin: |
| 25 destination_netloc = get_swapped_origin_netloc(parsed.netloc) |
| 26 |
| 27 destination_url = urlparse.urlunsplit(urlparse.SplitResult( |
| 28 scheme = parsed.scheme, |
| 29 netloc = destination_netloc, |
| 30 path = parsed.path, |
| 31 query = None, |
| 32 fragment = None)) |
| 33 |
| 34 return destination_url |
| 35 |
| 36 |
| 37 def redirect(url, response): |
| 38 response.add_required_headers = False |
| 39 response.writer.write_status(301) |
| 40 response.writer.write_header("access-control-allow-origin", "*") |
| 41 response.writer.write_header("location", url) |
| 42 response.writer.end_headers() |
| 43 response.writer.write("") |
| 44 |
| 45 |
| 46 def preprocess_redirection(request, response): |
| 47 if "redirection" not in request.GET: |
| 48 return False |
| 49 |
| 50 redirection = request.GET["redirection"] |
| 51 |
| 52 if redirection == "no-redirect": |
| 53 return False |
| 54 elif redirection == "keep-origin-redirect": |
| 55 redirect_url = create_redirect_url(request, cross_origin = False) |
| 56 elif redirection == "swap-origin-redirect": |
| 57 redirect_url = create_redirect_url(request, cross_origin = True) |
| 58 else: |
| 59 raise ValueError("Invalid redirection type '%s'" % redirection) |
| 60 |
| 61 redirect(redirect_url, response) |
| 62 return True |
| 63 |
| 64 |
| 65 def __noop(request, response): |
| 66 return "" |
| 67 |
| 68 |
| 69 def respond(request, |
| 70 response, |
| 71 status_code = 200, |
| 72 content_type = "text/html", |
| 73 payload_generator = __noop, |
| 74 cache_control = "no-cache; must-revalidate", |
| 75 access_control_allow_origin = "*"): |
| 76 if preprocess_redirection(request, response): |
| 77 return |
| 78 |
| 79 response.add_required_headers = False |
| 80 response.writer.write_status(status_code) |
| 81 |
| 82 if access_control_allow_origin != None: |
| 83 response.writer.write_header("access-control-allow-origin", |
| 84 access_control_allow_origin) |
| 85 response.writer.write_header("content-type", content_type) |
| 86 response.writer.write_header("cache-control", cache_control) |
| 87 response.writer.end_headers() |
| 88 |
| 89 server_data = {"headers": json.dumps(request.headers, indent = 4)} |
| 90 |
| 91 payload = payload_generator(server_data) |
| 92 response.writer.write(payload) |
| 93 |
| 94 |
OLD | NEW |