def translate_headers(self, url, env): headers = {} splits = urlsplit(url) 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 == 'HTTP_X_CSRFTOKEN': name = 'X-CSRFToken' cookie_val = extract_client_cookie(env, 'csrftoken') if cookie_val: value = cookie_val 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 if value: headers[name] = value return headers
def translate_headers(self, url, urlkey, env): headers = {} splits = urlsplit(url) has_cookies = False for name, value in six.iteritems(env): if name == 'HTTP_HOST': name = 'Host' value = splits.netloc elif name == 'HTTP_ORIGIN': name = 'Origin' value = (splits.scheme + '://' + splits.netloc) elif name == 'HTTP_X_CSRFTOKEN': name = 'X-CSRFToken' cookie_val = extract_client_cookie(env, 'csrftoken') if cookie_val: value = cookie_val elif name == 'HTTP_REFERER': continue elif name == 'HTTP_X_PYWB_REQUESTED_WITH': continue elif name == 'HTTP_X_FORWARDED_PROTO': name = 'X-Forwarded-Proto' value = splits.scheme elif name == 'HTTP_COOKIE': name = 'Cookie' value = self._req_cookie_rewrite(urlkey, value) has_cookies = True 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: value = None if value: headers[name] = value if not has_cookies: value = self._req_cookie_rewrite(urlkey, '') if value: headers['Cookie'] = value return headers
def get_coll(self, env): sesh_id = extract_client_cookie(env, self.cookie_name) coll = None ts = None if sesh_id: coll = self.cache[sesh_id + ':c'] ts = self.cache[sesh_id + ':t'] return coll, ts, sesh_id
def get_req_headers(self): headers = {} has_cookies = False for name, value in iteritems(self.env): if name == 'HTTP_HOST': name = 'Host' value = self.splits.netloc elif name == 'HTTP_ORIGIN': name = 'Origin' value = (self.splits.scheme + '://' + self.splits.netloc) elif name == 'HTTP_X_CSRFTOKEN': name = 'X-CSRFToken' cookie_val = extract_client_cookie(self.env, 'csrftoken') if cookie_val: value = cookie_val elif name == 'HTTP_X_PYWB_REQUESTED_WITH': continue elif name == 'HTTP_X_FORWARDED_PROTO': name = 'X-Forwarded-Proto' value = self.splits.scheme elif name == 'HTTP_COOKIE': name = 'Cookie' value = self._req_cookie_rewrite(value) has_cookies = True elif name.startswith('HTTP_'): name = name[5:].title().replace('_', '-') elif name in ('CONTENT_LENGTH', 'CONTENT_TYPE'): name = name.title().replace('_', '-') else: value = None if value: headers[name] = value if not has_cookies: value = self._req_cookie_rewrite('') if value: headers['Cookie'] = value if self.extra_cookie: headers['Cookie'] = self.extra_cookie + ';' + headers.get('Cookie', '') print('Cookie', headers['Cookie']) return headers
def get_req_headers(self): headers = {} has_cookies = False for name, value in iteritems(self.env): if name == 'HTTP_HOST': name = 'Host' if self.splits: value = self.splits.netloc elif name == 'HTTP_ORIGIN': name = 'Origin' if self.splits: value = (self.splits.scheme + '://' + self.splits.netloc) elif name == 'HTTP_X_CSRFTOKEN': name = 'X-CSRFToken' if self.splits: cookie_val = extract_client_cookie(self.env, 'csrftoken') if cookie_val: value = cookie_val elif name == 'HTTP_X_PYWB_REQUESTED_WITH': continue elif name in ('HTTP_CONNECTION', 'HTTP_PROXY_CONNECTION'): continue elif name in ('HTTP_IF_MODIFIED_SINCE', 'HTTP_IF_UNMODIFIED_SINCE'): continue elif name == 'HTTP_X_FORWARDED_PROTO': name = 'X-Forwarded-Proto' if self.splits: value = self.splits.scheme elif name.startswith('HTTP_'): name = name[5:].title().replace('_', '-') elif name in ('CONTENT_LENGTH', 'CONTENT_TYPE'): name = name.title().replace('_', '-') else: value = None if value: headers[name] = value if self.extra_cookie: headers['Cookie'] = self.extra_cookie + ';' + headers.get('Cookie', '') return headers
def get_coll(self, env): sesh_id = extract_client_cookie(env, self.cookie_name) coll = None ts = None if sesh_id: coll = self.cache[sesh_id + ':c'] try: ts = self.cache[sesh_id + ':t'] except KeyError: pass return coll, ts, sesh_id
def handle_magic_page(self, env): request_url = env['REL_REQUEST_URI'] parts = urlparse.urlsplit(request_url) server_name = env['pywb.proxy_host'] path_url = parts.path[1:] if parts.query: path_url += '?' + parts.query if server_name.startswith('auto'): coll, ts, sesh_id = self.get_coll(env) if coll: return self.make_sethost_cookie_response(sesh_id, path_url, env) else: return self.make_magic_response('select', path_url, env) elif server_name.startswith('query.'): wb_url = WbUrl(path_url) # only dealing with specific timestamp setting if wb_url.is_query(): return None coll, ts, sesh_id = self.get_coll(env) if not coll: return self.make_magic_response('select', path_url, env) self.set_ts(sesh_id, wb_url.timestamp) return self.make_redir_response(wb_url.url) elif server_name.endswith(self.set_prefix): old_sesh_id = extract_client_cookie(env, self.cookie_name) sesh_id = self.create_renew_sesh_id(old_sesh_id) if sesh_id != old_sesh_id: headers = self.make_cookie_headers(sesh_id, self.magic_name) else: headers = None coll = server_name[:-len(self.set_prefix)] # set sesh value self.set_coll(sesh_id, coll) return self.make_sethost_cookie_response(sesh_id, path_url, env, headers=headers) elif self.sethost_prefix in server_name: inx = server_name.find(self.sethost_prefix) sesh_id = server_name[:inx] domain = server_name[inx + len(self.sethost_prefix):] headers = self.make_cookie_headers(sesh_id, domain) full_url = env['pywb.proxy_scheme'] + '://' + domain full_url += '/' + path_url return self.make_redir_response(full_url, headers=headers) elif 'select.' in server_name: coll, ts, sesh_id = self.get_coll(env) route_temp = '-set.' + self.magic_name + '/' + path_url return (self.proxy_select_view. render_response(routes=self.routes, route_temp=route_temp, coll=coll, url=path_url))
def handle_magic_page(self, env): request_url = env['REL_REQUEST_URI'] parts = urlsplit(request_url) server_name = env['pywb.proxy_host'] path_url = parts.path[1:] if parts.query: path_url += '?' + parts.query if server_name.startswith('auto'): coll, ts, sesh_id = self.get_coll(env) if coll: return self.make_sethost_cookie_response(sesh_id, path_url, env) else: return self.make_magic_response('select', path_url, env) elif server_name.startswith('query.'): wb_url = WbUrl(path_url) # only dealing with specific timestamp setting if wb_url.is_query(): return None coll, ts, sesh_id = self.get_coll(env) if not coll: return self.make_magic_response('select', path_url, env) self.set_ts(sesh_id, wb_url.timestamp) return self.make_redir_response(wb_url.url) elif server_name.endswith(self.set_prefix): old_sesh_id = extract_client_cookie(env, self.cookie_name) sesh_id = self.create_renew_sesh_id(old_sesh_id) if sesh_id != old_sesh_id: headers = self.make_cookie_headers(sesh_id, self.magic_name) else: headers = None coll = server_name[:-len(self.set_prefix)] # set sesh value self.set_coll(sesh_id, coll) return self.make_sethost_cookie_response(sesh_id, path_url, env, headers=headers) elif self.sethost_prefix in server_name: inx = server_name.find(self.sethost_prefix) sesh_id = server_name[:inx] domain = server_name[inx + len(self.sethost_prefix):] headers = self.make_cookie_headers(sesh_id, domain) full_url = env['pywb.proxy_scheme'] + '://' + domain full_url += '/' + path_url return self.make_redir_response(full_url, headers=headers) elif 'select.' in server_name: coll, ts, sesh_id = self.get_coll(env) route_temp = '-set.' + self.magic_name + '/' + path_url return (self.proxy_select_view. render_response(routes=self.routes, route_temp=route_temp, coll=coll, url=path_url))
def get_req_headers(self): headers = {} has_cookies = False for name, value in iteritems(self.env): if name == 'HTTP_HOST': name = 'Host' if self.splits: value = self.splits.netloc elif name == 'HTTP_ORIGIN': name = 'Origin' referrer = self.env.get('HTTP_REFERER') if referrer: splits = urlsplit(referrer) else: splits = self.splits if splits: value = (splits.scheme + '://' + splits.netloc) elif name == 'HTTP_X_CSRFTOKEN': name = 'X-CSRFToken' if self.splits: cookie_val = extract_client_cookie(self.env, 'csrftoken') if cookie_val: value = cookie_val elif name == 'HTTP_X_PYWB_REQUESTED_WITH': continue elif name in ('HTTP_CONNECTION', 'HTTP_PROXY_CONNECTION'): continue elif name in ('HTTP_IF_MODIFIED_SINCE', 'HTTP_IF_UNMODIFIED_SINCE'): continue elif name == 'HTTP_X_FORWARDED_PROTO': name = 'X-Forwarded-Proto' if self.splits: value = self.splits.scheme elif not has_brotli and name == 'HTTP_ACCEPT_ENCODING' and 'br' in value: # if brotli not available, remove 'br' from accept-encoding to avoid # capture brotli encoded content name = 'Accept-Encoding' value = ','.join([enc for enc in value.split(',') if enc.strip() != 'br']) elif name.startswith('HTTP_'): name = name[5:].title().replace('_', '-') elif name in ('CONTENT_LENGTH', 'CONTENT_TYPE'): name = name.title().replace('_', '-') else: value = None if value: headers[name] = value if self.extra_cookie: headers['Cookie'] = self.extra_cookie + ';' + headers.get('Cookie', '') return headers
def get_req_headers(self): headers = {} has_cookies = False for name, value in iteritems(self.env): if name == 'HTTP_HOST': name = 'Host' if self.splits: value = self.splits.netloc elif name == 'HTTP_ORIGIN': name = 'Origin' referrer = self.env.get('HTTP_REFERER') if referrer: splits = urlsplit(referrer) else: splits = self.splits if splits: value = (splits.scheme + '://' + splits.netloc) elif name == 'HTTP_X_CSRFTOKEN': name = 'X-CSRFToken' if self.splits: cookie_val = extract_client_cookie(self.env, 'csrftoken') if cookie_val: value = cookie_val elif name == 'HTTP_X_PYWB_REQUESTED_WITH': continue elif name in ('HTTP_CONNECTION', 'HTTP_PROXY_CONNECTION'): continue elif name in ('HTTP_IF_MODIFIED_SINCE', 'HTTP_IF_UNMODIFIED_SINCE'): continue elif name == 'HTTP_X_FORWARDED_PROTO': name = 'X-Forwarded-Proto' if self.splits: value = self.splits.scheme elif not has_brotli and name == 'HTTP_ACCEPT_ENCODING' and 'br' in value: # if brotli not available, remove 'br' from accept-encoding to avoid # capture brotli encoded content name = 'Accept-Encoding' value = ','.join( [enc for enc in value.split(',') if enc.strip() != 'br']) elif name.startswith('HTTP_'): name = name[5:].title().replace('_', '-') elif name in ('CONTENT_LENGTH', 'CONTENT_TYPE'): name = name.title().replace('_', '-') else: value = None if value: headers[name] = value if self.extra_cookie: headers['Cookie'] = self.extra_cookie + ';' + headers.get( 'Cookie', '') return headers