| import json |
| |
| SUBDOMAIN_TUPLE_TO_ALLOWED_ORIGINS_MAP = { |
| ("", "web-platform"): [], |
| ("www", "web-platform"): [ |
| { |
| "scriptOrigin": "https://web-platform.test", |
| "contextOrigin": ["https://web-platform.test"], |
| }, |
| { |
| "scriptOrigin": "https://www.web-platform.test", |
| "contextOrigin": "*", |
| }, |
| ], |
| ("www1", "web-platform"): [ |
| { |
| "scriptOrigin": [ |
| "https://google.com", |
| "https://web-platform.test", |
| ], |
| "contextOrigin": "https://web-platform.test", |
| }, |
| { |
| "scriptOrigin": "https://www.web-platform.test", |
| "contextOrigin": ["*"], |
| }, |
| ], |
| ("www2", "web-platform"): [], |
| ("", "not-web-platform"): [], |
| ("www", "not-web-platform"): [], |
| ("www1", "not-web-platform"): [], |
| ("www2", "not-web-platform"): [], |
| } |
| |
| def get_host(request): |
| return request.url_parts.netloc.split(":")[0] |
| |
| def get_port(request): |
| if len(request.url_parts.netloc.split(":")) > 1: |
| return request.url_parts.netloc.split(":")[1] |
| return 0 |
| |
| def get_subdomain_tuple(request): |
| host = get_host(request) |
| host_list = host.split(".") |
| if len(host_list) == 0 or len(host_list) > 3: |
| raise ValueError("Invalid host " + host) |
| if len(host_list) == 1: |
| return ("", host_list[0]) |
| return (host_list[0], host_list[1]) |
| |
| def get_allowed_origins(request): |
| subdomain_tuple = get_subdomain_tuple(request) |
| origin_list = SUBDOMAIN_TUPLE_TO_ALLOWED_ORIGINS_MAP[subdomain_tuple] |
| origins_string = json.dumps(origin_list) |
| test_with_port = ".test:" + str(get_port(request)) |
| origins_with_ports = origins_string.replace(".test", test_with_port) |
| return origins_with_ports |
| |
| def get_json(request, response): |
| response.status = (200, b"OK") |
| response.headers.set(b"Content-Type", b"application/json") |
| response.headers.set(b"Access-Control-Allow-Origin", b"*") |
| response.content = get_allowed_origins(request) |