Source code for pywb.rewrite.cookie_rewriter

from six.moves.http_cookies import SimpleCookie, CookieError
import six
import re

import logging
logger = logging.getLogger(__name__)


#================================================================
[docs]class WbUrlBaseCookieRewriter(object): """ Base Cookie rewriter for wburl-based requests. """ REMOVE_EXPIRES = re.compile('[;]\s*?expires=.{4}[^,;]+', re.I) def __init__(self, url_rewriter): self.url_rewriter = url_rewriter
[docs] def rewrite(self, cookie_str, header='Set-Cookie'): results = [] cookie_str = self.REMOVE_EXPIRES.sub('', cookie_str) try: cookie = SimpleCookie(cookie_str) except CookieError as e: logger.info(e, exc_info=True) return results for name, morsel in six.iteritems(cookie): morsel = self.rewrite_cookie(name, morsel) self._filter_morsel(morsel) if not self.add_prefix_cookie_for_all_mods(morsel, results, header): value = morsel.OutputString() results.append((header, value)) return results
def _filter_morsel(self, morsel): path = morsel.get('path') if path: inx = path.find(self.url_rewriter.rel_prefix) if inx > 0: morsel['path'] = path[inx:] if not self.url_rewriter.full_prefix.startswith('https://'): # also remove secure to avoid issues when # proxying over plain http if morsel.get('secure'): del morsel['secure'] if not self.url_rewriter.rewrite_opts.get('is_live'): self._remove_age_opts(morsel) def _remove_age_opts(self, morsel): # remove expires as it refers to archived time if morsel.get('expires'): del morsel['expires'] # don't use max-age, just expire at end of session if morsel.get('max-age'): del morsel['max-age']
#=================================================================
[docs]class RemoveAllCookiesRewriter(WbUrlBaseCookieRewriter):
[docs] def rewrite(self, cookie_str, header='Set-Cookie'): return []
#=================================================================
[docs]class MinimalScopeCookieRewriter(WbUrlBaseCookieRewriter): """ Attempt to rewrite cookies to minimal scope possible If path present, rewrite path to current rewritten url only If domain present, remove domain and set to path prefix """
#=================================================================
[docs]class HostScopeCookieRewriter(WbUrlBaseCookieRewriter): """ Attempt to rewrite cookies to current host url.. If path present, rewrite path to current host. Only makes sense in live proxy or no redirect mode, as otherwise timestamp may change. If domain present, remove domain and set to path prefix """
#=================================================================
[docs]class ExactPathCookieRewriter(WbUrlBaseCookieRewriter): """ Rewrite cookies only using exact path, useful for live rewrite without a timestamp and to minimize cookie pollution If path or domain present, simply remove """
#=================================================================
[docs]class RootScopeCookieRewriter(WbUrlBaseCookieRewriter): """ Sometimes it is necessary to rewrite cookies to root scope in order to work across time boundaries and modifiers This rewriter simply sets all cookies to be in the root """
#=================================================================