From dfef05a74d2e5c0009b9c43bc62a81c3d12fc876 Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Fri, 13 Jun 2014 16:22:18 -0700 Subject: [PATCH] rewrite: live rewrite: switch to including all headers rather than a whitelist for proxying --- pywb/rewrite/rewrite_live.py | 42 ++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/pywb/rewrite/rewrite_live.py b/pywb/rewrite/rewrite_live.py index 4ed9354e..dda6053a 100644 --- a/pywb/rewrite/rewrite_live.py +++ b/pywb/rewrite/rewrite_live.py @@ -50,16 +50,32 @@ class LiveRewriter(object): return (status_headers, stream) - def translate_headers(self, env, header_list=None): + def translate_headers(self, url, env): headers = {} - if not header_list: - header_list = self.PROXY_HEADER_LIST + splits = urlsplit(url) - for env_name, req_name in header_list: - value = env.get(env_name) - if value: - headers[req_name] = value + for name, value in env.iteritems(): + if name == 'HTTP_HOST': + name = 'Host' + value = splits.netloc + + elif name == 'HTTP_ORIGIN': + name = 'Origin' + value = (splits.scheme + '://' + splits.netloc) + + elif name.startswith('HTTP_'): + name = name[5:].title().replace('_', '-') + + elif name in ('CONTENT_LENGTH', 'CONTENT_TYPE'): + name = name.title().replace('_', '-') + + elif name == 'REL_REFERER': + name = 'Referer' + else: + continue + + headers[name] = value return headers @@ -76,17 +92,7 @@ class LiveRewriter(object): method = env['REQUEST_METHOD'].upper() input_ = env['wsgi.input'] - host = env.get('HTTP_HOST') - origin = env.get('HTTP_ORIGIN') - if host or origin: - splits = urlsplit(url) - if host: - req_headers['Host'] = splits.netloc - if origin: - new_origin = (splits.scheme + '://' + splits.netloc) - req_headers['Origin'] = new_origin - - req_headers.update(self.translate_headers(env)) + req_headers.update(self.translate_headers(url, env)) if method in ('POST', 'PUT'): len_ = env.get('CONTENT_LENGTH')