From b5bf28e68f38396defd50be4ac72ae19a6bf5eb5 Mon Sep 17 00:00:00 2001 From: "Kevin (Kun) \"Kassimo\" Qian" Date: Fri, 28 Feb 2020 06:04:18 -0800 Subject: fetch_cached_remote_source support redirect URL without base (#4099) --- tools/http_server.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'tools/http_server.py') diff --git a/tools/http_server.py b/tools/http_server.py index 7cb2e28f9..0ed61465c 100755 --- a/tools/http_server.py +++ b/tools/http_server.py @@ -21,6 +21,7 @@ REDIRECT_PORT = 4546 ANOTHER_REDIRECT_PORT = 4547 DOUBLE_REDIRECTS_PORT = 4548 INF_REDIRECTS_PORT = 4549 +REDIRECT_ABSOLUTE_PORT = 4550 HTTPS_PORT = 5545 @@ -284,6 +285,29 @@ def inf_redirects_server(): return base_redirect_server(INF_REDIRECTS_PORT, INF_REDIRECTS_PORT) +# redirect server that redirect to absolute paths under same host +# redirects /REDIRECT/file_name to /file_name +def absolute_redirect_server(): + os.chdir(root_path) + + class AbsoluteRedirectHandler(ContentTypeHandler): + def do_GET(self): + print(self.path) + if (self.path.startswith("/REDIRECT/")): + self.send_response(302) + self.send_header('Location', + self.path.split('/REDIRECT', 1)[1]) + self.end_headers() + else: + ContentTypeHandler.do_GET(self) + + s = get_socket(REDIRECT_ABSOLUTE_PORT, AbsoluteRedirectHandler, False) + if not QUIET: + print("absolute redirect server http://localhost:%d/" % + REDIRECT_ABSOLUTE_PORT) + return RunningServer(s, start(s)) + + def https_server(): os.chdir(root_path) # Hopefully the main thread doesn't also chdir. Handler = ContentTypeHandler @@ -310,7 +334,8 @@ def start(s): @contextmanager def spawn(): servers = (server(), redirect_server(), another_redirect_server(), - double_redirects_server(), https_server()) + double_redirects_server(), https_server(), + absolute_redirect_server()) # In order to wait for each of the servers to be ready, we try connecting to # them with a tcp socket. for running_server in servers: -- cgit v1.2.3