import os, sys sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) import subresource def generate_payload(request, server_data): data = ('{"headers": %(headers)s}') % server_data type = 'image' if "type" in request.GET: type = request.GET["type"] if "id" in request.GET: request.server.stash.put(request.GET["id"], data) if type == 'image': return subresource.get_template("image.css.template") % {"id": request.GET["id"]} elif type == 'font': return subresource.get_template("font.css.template") % {"id": request.GET["id"]} elif type == 'svg': return subresource.get_template("svg.css.template") % { "id": request.GET["id"], "property": request.GET["property"]} def generate_import_rule(request, server_data): return "@import url('%(url)s');" % { "url": subresource.create_url(request, swap_origin=True, query_parameter_to_remove="import-rule") } def generate_report_headers_payload(request, server_data): stashed_data = request.server.stash.take(request.GET["id"]) return stashed_data def main(request, response): payload_generator = lambda data: generate_payload(request, data) content_type = "text/css" referrer_policy = "unsafe-url" if "import-rule" in request.GET: payload_generator = lambda data: generate_import_rule(request, data) if "report-headers" in request.GET: payload_generator = lambda data: generate_report_headers_payload(request, data) content_type = 'application/json' if "referrer-policy" in request.GET: referrer_policy = request.GET["referrer-policy"] subresource.respond( request, response, payload_generator = payload_generator, content_type = content_type, maybe_additional_headers = { "Referrer-Policy": referrer_policy })