Skip to content

Commit 43716f5

Browse files
committed
rewrite: add HostScopeCookieRewriter and make it default -- set cookie scope to rewritten host
wombat: ensure rewrite html is using a string bump to 0.10.5!
1 parent a61685c commit 43716f5

File tree

6 files changed

+62
-626
lines changed

6 files changed

+62
-626
lines changed

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
PyWb 0.10.3
1+
PyWb 0.10.5
22
===========
33

44
.. image:: https://travis-ci.org/ikreymer/pywb.svg?branch=master

pywb/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = '0.10.3-dev'
1+
__version__ = '0.10.5'
22

33
DEFAULT_CONFIG = 'pywb/default_config.yaml'
44

pywb/rewrite/cookie_rewriter.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,40 @@ def rewrite_cookie(self, name, morsel):
6666
return morsel
6767

6868

69+
#=================================================================
70+
class HostScopeCookieRewriter(WbUrlBaseCookieRewriter):
71+
"""
72+
Attempt to rewrite cookies to current host url..
73+
74+
If path present, rewrite path to current host. Only makes sense in live
75+
proxy or no redirect mode, as otherwise timestamp may change.
76+
77+
If domain present, remove domain and set to path prefix
78+
"""
79+
80+
def rewrite_cookie(self, name, morsel):
81+
new_path = None
82+
83+
# if domain set, expand cookie to host prefix
84+
if morsel.get('domain'):
85+
del morsel['domain']
86+
new_path = self.url_rewriter.rewrite('/')
87+
88+
# set cookie to rewritten path
89+
elif morsel.get('path'):
90+
new_path = self.url_rewriter.rewrite(morsel['path'])
91+
92+
if new_path:
93+
inx = new_path.find(self.url_rewriter.rel_prefix)
94+
if inx > 0:
95+
new_path = new_path[inx:]
96+
97+
morsel['path'] = new_path
98+
99+
self._remove_age_opts(morsel)
100+
return morsel
101+
102+
69103
#=================================================================
70104
class ExactPathCookieRewriter(WbUrlBaseCookieRewriter):
71105
"""
@@ -112,7 +146,11 @@ def get_cookie_rewriter(cookie_scope):
112146
return RootScopeCookieRewriter
113147
elif cookie_scope == 'exact':
114148
return ExactPathCookieRewriter
149+
elif cookie_scope == 'host':
150+
return HostScopeCookieRewriter
115151
elif cookie_scope == 'removeall':
116152
return RemoveAllCookiesRewriter
117-
else:
153+
elif cookie_scope == 'coll':
118154
return MinimalScopeCookieRewriter
155+
else:
156+
return HostScopeCookieRewriter

pywb/rewrite/test/test_cookie_rewriter.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
r"""
2-
# Default -- MinimalScopeRewriter
2+
# Default -- MinimalScopeRewriter (Collection scope)
33
# No rewriting
44
>>> rewrite_cookie('a=b; c=d;')
55
[('Set-Cookie', 'a=b'), ('Set-Cookie', 'c=d')]
66
7-
>>> rewrite_cookie('some=value; Path=/;')
7+
>>> rewrite_cookie('some=value; Path=/;', urlrewriter, 'coll')
88
[('Set-Cookie', 'some=value; Path=/pywb/20131226101010/http://example.com/')]
99
10-
>>> rewrite_cookie('some=value; Path=../;', rewriter=urlrewriter2)
10+
>>> rewrite_cookie('some=value; Path=../;', urlrewriter2, 'coll')
1111
[('Set-Cookie', 'some=value; Path=/preview/em_/http://example.com/')]
1212
13-
>>> rewrite_cookie('some=value; Path=/diff/path/;')
13+
>>> rewrite_cookie('some=value; Path=/diff/path/;', urlrewriter, 'coll')
1414
[('Set-Cookie', 'some=value; Path=/pywb/20131226101010/http://example.com/diff/path/')]
1515
1616
# if domain set, set path to root
17-
>>> rewrite_cookie('some=value; Domain=.example.com; Path=/diff/path/; Max-Age=1500')
17+
>>> rewrite_cookie('some=value; Domain=.example.com; Path=/diff/path/; Max-Age=1500', urlrewriter, 'coll')
1818
[('Set-Cookie', 'some=value; Path=/pywb/')]
1919
20-
>>> rewrite_cookie('abc=def; Path=file.html; Expires=Wed, 13 Jan 2021 22:23:01 GMT')
20+
>>> rewrite_cookie('abc=def; Path=file.html; Expires=Wed, 13 Jan 2021 22:23:01 GMT', urlrewriter, 'coll')
2121
[('Set-Cookie', 'abc=def; Path=/pywb/20131226101010/http://example.com/some/path/file.html')]
2222
2323
# Cookie with invalid chars, not parsed
24-
>>> rewrite_cookie('abc@def=123')
24+
>>> rewrite_cookie('abc@def=123', urlrewriter, 'coll')
2525
[]
2626
2727
@@ -33,6 +33,14 @@
3333
[('Set-Cookie', 'some=value')]
3434
3535
36+
# HostCookieRewriter -- set path to host
37+
>>> rewrite_cookie('some=value; Path=/diff/path/;', urlrewriter, 'host')
38+
[('Set-Cookie', 'some=value; Path=/pywb/20131226101010/http://example.com/diff/path/')]
39+
40+
>>> rewrite_cookie('some=value; Domain=.example.com; Path=/diff/path/; Max-Age=1500', urlrewriter, 'host')
41+
[('Set-Cookie', 'some=value; Path=/pywb/20131226101010/http://example.com/')]
42+
43+
3644
# RootCookieRewriter -- always sets Path=/, removes Domain
3745
>>> rewrite_cookie('some=value; Path=/diff/path/;', urlrewriter, 'root')
3846
[('Set-Cookie', 'some=value; Path=/')]

0 commit comments

Comments
 (0)