ruleset.py (2034B)
1 def main(request, response): 2 url = request.GET[b"url"].decode("utf-8") 3 uuid = request.GET[b"uuid"].decode("utf-8") 4 page = request.GET[b"page"].decode("utf-8") 5 valid_json = request.GET[b"valid_json"].decode("utf-8") 6 empty_json = request.GET[b"empty_json"].decode("utf-8") 7 fail_cors = request.GET[b"fail_cors"].decode("utf-8") 8 valid_encoding = request.GET[b"valid_encoding"].decode("utf-8") 9 redirect = request.GET[b"redirect"].decode("utf-8") 10 sec_fetch_dest = request.headers[b"Sec-Fetch-Dest"].decode( 11 "utf-8").lower() if b"Sec-Fetch-Dest" in request.headers else None 12 content_type = b"application/speculationrules+json" if request.GET[ 13 b"valid_mime"].decode("utf-8") == "true" else b"application/json" 14 status = int(request.GET[b"status"]) 15 16 if redirect == "true": 17 new_url = request.url.replace("redirect=true", 18 "redirect=false").encode("utf-8") 19 return 301, [(b"Location", new_url), 20 (b'Access-Control-Allow-Origin', b'*')], b"" 21 22 encoding = "utf-8" if valid_encoding == "true" else "windows-1250" 23 content_type += f'; charset={encoding}'.encode('utf-8') 24 strparam = b'\xc3\xb7'.decode('utf-8') 25 26 content = f''' 27 {{ 28 "prefetch": [ 29 {{ 30 "source":"list", 31 "urls":["{url}?uuid={uuid}&page={page}&str={strparam}"] 32 }} 33 ] 34 }} 35 ''' 36 if empty_json == "true": 37 content = "" 38 elif valid_json != "true": 39 content = "invalid json" 40 elif sec_fetch_dest is None: 41 content = "Missing Sec-Fetch-Dest" 42 elif sec_fetch_dest != "speculationrules": 43 content = "Unexpected Sec-Fetch-Dest " + sec_fetch_dest 44 45 headers = [(b"Content-Type", content_type)] 46 if fail_cors != "true": 47 origin = request.headers[ 48 b"Origin"] if b"Origin" in request.headers else b'*' 49 headers.append((b'Access-Control-Allow-Origin', origin)) 50 return status, headers, content.encode(encoding)