1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 08:04:49 +01:00

cookie_rewriter: ensure cookie paths are always relative

cookie_rewriter tests: add cookie rewriter tests for secure, httponly
html_rewriter tests: add <base> rel and abs rewrite tests
no cover for waitress as its not used by default
This commit is contained in:
Ilya Kreymer 2015-07-31 11:37:50 -07:00
parent 569614da24
commit 466968e974
4 changed files with 28 additions and 15 deletions

View File

@ -49,12 +49,12 @@ class BaseCli(object):
pass
def run(self):
if self.r.server == 'waitress':
if self.r.server == 'waitress': #pragma: no cover
self.run_waitress()
else:
self.run_wsgiref()
def run_waitress(self):
def run_waitress(self): #pragma: no cover
from waitress import serve
print(self.desc)
serve(self.application, port=self.r.port, threads=self.r.threads)

View File

@ -18,7 +18,14 @@ class WbUrlBaseCookieRewriter(object):
for name, morsel in cookie.iteritems():
morsel = self.rewrite_cookie(name, morsel)
if morsel:
path = morsel.get('path')
if path:
inx = path.find(self.url_rewriter.rel_prefix)
if inx > 0:
morsel['path'] = path[inx:]
results.append((header, morsel.OutputString()))
return results
@ -78,23 +85,14 @@ class HostScopeCookieRewriter(WbUrlBaseCookieRewriter):
"""
def rewrite_cookie(self, name, morsel):
new_path = None
# if domain set, expand cookie to host prefix
if morsel.get('domain'):
del morsel['domain']
new_path = self.url_rewriter.rewrite('/')
morsel['path'] = self.url_rewriter.rewrite('/')
# set cookie to rewritten path
elif morsel.get('path'):
new_path = self.url_rewriter.rewrite(morsel['path'])
if new_path:
inx = new_path.find(self.url_rewriter.rel_prefix)
if inx > 0:
new_path = new_path[inx:]
morsel['path'] = new_path
morsel['path'] = self.url_rewriter.rewrite(morsel['path'])
self._remove_age_opts(morsel)
return morsel

View File

@ -34,12 +34,15 @@ r"""
# HostCookieRewriter -- set path to host
>>> rewrite_cookie('some=value; Path=/diff/path/;', urlrewriter, 'host')
>>> rewrite_cookie('some=value; Path=/diff/path/', urlrewriter, 'host')
[('Set-Cookie', 'some=value; Path=/pywb/20131226101010/http://example.com/diff/path/')]
>>> rewrite_cookie('some=value; Domain=.example.com; Path=/diff/path/; Max-Age=1500', urlrewriter, 'host')
[('Set-Cookie', 'some=value; Path=/pywb/20131226101010/http://example.com/')]
>>> rewrite_cookie('some=value; Domain=.example.com; Secure; Path=/diff/path/; HttpOnly; Max-Age=1500', urlrewriter, 'host')
[('Set-Cookie', 'some=value; httponly; Path=/pywb/20131226101010/http://example.com/')]
# RootCookieRewriter -- always sets Path=/, removes Domain
>>> rewrite_cookie('some=value; Path=/diff/path/;', urlrewriter, 'root')
@ -62,7 +65,7 @@ r"""
from pywb.rewrite.cookie_rewriter import MinimalScopeCookieRewriter, get_cookie_rewriter
from pywb.rewrite.url_rewriter import UrlRewriter
urlrewriter = UrlRewriter('20131226101010/http://example.com/some/path/index.html', '/pywb/')
urlrewriter = UrlRewriter('20131226101010/http://example.com/some/path/index.html', 'http://localhost:8080/pywb/', rel_prefix='/pywb/')
urlrewriter2 = UrlRewriter('em_/http://example.com/', '/preview/')

View File

@ -24,6 +24,14 @@ ur"""
>>> parse('<html><head><base href="http://example.com/diff/path/file.html"/>')
<html><head><base href="/web/20131226101010/http://example.com/diff/path/file.html"/>
# Full Path
>>> parse('<html><head><base href="http://example.com/diff/path/file.html"/>', urlrewriter=full_path_urlrewriter)
<html><head><base href="http://localhost:80/web/20131226101010/http://example.com/diff/path/file.html"/>
# Rel Base
>>> parse('<html><head><base href="/other/file.html"/>', urlrewriter=full_path_urlrewriter)
<html><head><base href="/web/20131226101010/http://example.com/other/file.html"/>
>>> parse('<base href="static/"/><img src="image.gif"/>')
<base href="/web/20131226101010/http://example.com/some/path/static/"/><img src="/web/20131226101010im_/http://example.com/some/path/static/image.gif"/>
@ -186,6 +194,10 @@ urlrewriter = UrlRewriter('20131226101010/http://example.com/some/path/index.htm
'/web/',
rewrite_opts=dict(punycode_links=False))
full_path_urlrewriter = UrlRewriter('20131226101010/http://example.com/some/path/index.html',
'http://localhost:80/web/',
rewrite_opts=dict(punycode_links=False))
urlrewriter_pencode = UrlRewriter('20131226101010/http://example.com/some/path/index.html',
'/web/',
rewrite_opts=dict(punycode_links=True))