diff --git a/pywb/rewrite/cookie_rewriter.py b/pywb/rewrite/cookie_rewriter.py index 9ea80ac7..53dd622c 100644 --- a/pywb/rewrite/cookie_rewriter.py +++ b/pywb/rewrite/cookie_rewriter.py @@ -7,14 +7,14 @@ import re class WbUrlBaseCookieRewriter(object): """ Base Cookie rewriter for wburl-based requests. """ - UTC_RX = re.compile('((?:.*)Expires=(?:.*))UTC', re.I) + REMOVE_EXPIRES = re.compile('[;]\s*?expires=.{4}[^,;]+', re.I) def __init__(self, url_rewriter): self.url_rewriter = url_rewriter def rewrite(self, cookie_str, header='Set-Cookie'): results = [] - cookie_str = self.UTC_RX.sub('\\1GMT', cookie_str) + cookie_str = self.REMOVE_EXPIRES.sub('', cookie_str) try: cookie = SimpleCookie(cookie_str) except CookieError: diff --git a/pywb/rewrite/test/test_cookie_rewriter.py b/pywb/rewrite/test/test_cookie_rewriter.py index c6a7780d..e99e50bb 100644 --- a/pywb/rewrite/test/test_cookie_rewriter.py +++ b/pywb/rewrite/test/test_cookie_rewriter.py @@ -89,38 +89,45 @@ def rewrite_cookie(cookie_str, rewriter=urlrewriter, scope='default'): return cookie_rewriter(rewriter).rewrite(cookie_str) +# ============================================================================ @pytest.mark.skipif(sys.version_info < (2,7), reason='Unsupported') -def test_with_expires(): - # keep expires - res = rewrite_cookie('abc=def; Path=/file.html; Expires=Wed, 13 Jan 2021 22:23:01 GMT', urlrewriter2, 'coll') - assert len(res) == 1 - assert res[0][1].lower() == 'abc=def; expires=wed, 13 jan 2021 22:23:01 gmt; path=/preview/em_/http://example.com/file.html' +class TestCookies(object): + def test_remove_expires(self): + res = rewrite_cookie('abc=def; Path=/file.html; Expires=Wed, 13 Jan 2021 22:23:01 GMT', urlrewriter2, 'coll') + assert len(res) == 1 + assert res[0][1].lower() == 'abc=def; path=/preview/em_/http://example.com/file.html' -@pytest.mark.skipif(sys.version_info < (2,7), reason='Unsupported') -def test_with_expires_utc_replace(): - # keep expires, UTC->GMT - res = rewrite_cookie('abc=def; Path=/file.html; Expires=Wed, 13 Jan 2021 22:23:01 UTC', urlrewriter2, 'coll') - assert len(res) == 1 - assert res[0][1].lower() == 'abc=def; expires=wed, 13 jan 2021 22:23:01 gmt; path=/preview/em_/http://example.com/file.html' - - -@pytest.mark.skipif(sys.version_info < (2,7), reason='Unsupported') -def test_http_secure_flag(): - res = rewrite_cookie('some=value; Domain=.example.com; Secure; Path=/diff/path/; HttpOnly; Max-Age=1500', urlrewriter, 'host') - assert len(res) == 1 - assert res[0][1].lower() == 'some=value; httponly; path=/pywb/20131226101010/http://example.com/' - -@pytest.mark.skipif(sys.version_info < (2,7), reason='Unsupported') -def test_secure_flag_remove(): - # Secure Remove - res = rewrite_cookie('abc=def; Path=/file.html; HttpOnly; Secure', urlrewriter2, 'coll') - assert len(res) == 1 - assert res[0][1].lower() == 'abc=def; httponly; path=/preview/em_/http://example.com/file.html' - -@pytest.mark.skipif(sys.version_info < (2,7), reason='Unsupported') -def test_secure_flag_keep(): - # Secure Keep - res = rewrite_cookie('abc=def; Path=/file.html; HttpOnly; Secure', urlrewriter3, 'coll') - assert res[0][1].lower() == 'abc=def; httponly; path=/preview/em_/http://example.com/file.html; secure' + def test_remove_expires_2(self): + res = rewrite_cookie('abc=def; Path=/file.html; Expires=Wed, 13 Jan 2021 22:23:01 UTC', urlrewriter2, 'coll') + assert len(res) == 1 + assert res[0][1].lower() == 'abc=def; path=/preview/em_/http://example.com/file.html' + + def test_remove_expires_3(self): + res = rewrite_cookie('abc=def; Path=/file.html; Expires=Wed, 13 Jan 2021 22:23:01 GMT; httponly; Max-Age=100', urlrewriter2, 'coll') + assert len(res) == 1 + assert res[0][1].lower() == 'abc=def; httponly; max-age=100; path=/preview/em_/http://example.com/file.html' + + def test_remove_expires_4(self): + res = rewrite_cookie('abc=def; Path=/file.html; Expires=Wed, 13 Jan 2021 22:23:01 GMT, foo=bar', urlrewriter2, 'coll') + assert len(res) == 2 + res = sorted(res) + assert res[0][1].lower() == 'abc=def; path=/preview/em_/http://example.com/file.html,' + assert res[1][1].lower() == 'foo=bar' + + def test_http_secure_flag(self): + res = rewrite_cookie('some=value; Domain=.example.com; Secure; Path=/diff/path/; HttpOnly; Max-Age=1500', urlrewriter, 'host') + assert len(res) == 1 + assert res[0][1].lower() == 'some=value; httponly; path=/pywb/20131226101010/http://example.com/' + + def test_secure_flag_remove(self): + # Secure Remove + res = rewrite_cookie('abc=def; Path=/file.html; HttpOnly; Secure', urlrewriter2, 'coll') + assert len(res) == 1 + assert res[0][1].lower() == 'abc=def; httponly; path=/preview/em_/http://example.com/file.html' + + def test_secure_flag_keep(self): + # Secure Keep + res = rewrite_cookie('abc=def; Path=/file.html; HttpOnly; Secure', urlrewriter3, 'coll') + assert res[0][1].lower() == 'abc=def; httponly; path=/preview/em_/http://example.com/file.html; secure'