def setCookieLifeDays(self, days): """ offset for id cookie 'expires' element """ if type(days) not in (type(1), type(1.0)): raise BrowserIdManagerErr('Bad cookie lifetime in days %s ' '(requires integer value)' % escape(repr(days))) self.cookie_life_days = int(days)
def isBrowserIdFromUrl(self): """ See IBrowserIdManager. """ if not self.getBrowserId(create=False): raise BrowserIdManagerErr('There is no current browser id.') if getattr(self.REQUEST, 'browser_id_ns_') == 'url': return 1
def isBrowserIdNew(self): """ See IBrowserIdManager. """ if not self.getBrowserId(create=False): raise BrowserIdManagerErr('There is no current browser id.') # ns will be None if new return getattr(self.REQUEST, 'browser_id_ns_', None) is None
def setBrowserIdCookieByForce(self, bid): """ See IBrowserIdManager. """ if 'cookies' not in self.browserid_namespaces: raise BrowserIdManagerErr('Cookies are not now being used as a ' 'browser id namespace, thus the ' 'browserid cookie cannot be forced.') self._setCookie(bid, self.REQUEST)
def flushBrowserIdCookie(self): """ See IBrowserIdManager. """ if 'cookies' not in self.browserid_namespaces: raise BrowserIdManagerErr('Cookies are not now being used as a ' 'browser id namespace, thus the ' 'browserid cookie cannot be flushed.') self._setCookie('deleted', self.REQUEST, remove=1)
def setBrowserIdNamespaces(self, ns): """ accepts list of allowable browser id namespaces """ for name in ns: if name not in ALLOWED_BID_NAMESPACES: raise BrowserIdManagerErr('Bad browser id namespace %s' % repr(name)) self.browserid_namespaces = tuple(ns)
def setBrowserIdName(self, k): """ Set browser id name string o Enforce "valid" values. """ if not (type(k) is type('') and k and not badidnamecharsin(k)): raise BrowserIdManagerErr('Bad id name string %s' % escape(repr(k))) self.browserid_name = k
def encodeUrl(self, url, style='querystring', create=1): # See IBrowserIdManager bid = self.getBrowserId(create) if bid is None: raise BrowserIdManagerErr('There is no current browser id.') name = self.getBrowserIdName() if style == 'querystring': # encode bid in querystring if '?' in url: return '%s&%s=%s' % (url, name, bid) else: return '%s?%s=%s' % (url, name, bid) else: # encode bid as first two URL path segments proto, host, path, params, query, frag = urlparse(url) path = '/%s/%s%s' % (name, bid, path) return urlunparse((proto, host, path, params, query, frag))
def setCookieDomain(self, domain): """ sets cookie 'domain' element for id cookie """ if type(domain) is not type(''): raise BrowserIdManagerErr('Cookie domain must be string: %s' % escape(repr(domain))) if not domain: self.cookie_domain = '' return if not twodotsin(domain): raise BrowserIdManagerErr( 'Cookie domain must contain at least two dots ' '(e.g. ".zope.org" or "www.zope.org") or it must ' 'be left blank. : ' '%s' % escape( ` domain `)) if badcookiecharsin(domain): raise BrowserIdManagerErr('Bad characters in cookie domain %s' % escape( ` domain `)) self.cookie_domain = domain
def getBrowserId(self, create=1): """ See IBrowserIdManager. """ REQUEST = self.REQUEST # let's see if bid has already been attached to request bid = getattr(REQUEST, 'browser_id_', None) if bid is not None: # it's already set in this request so we can just return it # if it's well-formed if not isAWellFormedBrowserId(bid): # somebody screwed with the REQUEST instance during # this request. raise BrowserIdManagerErr('Ill-formed browserid in ' 'REQUEST.browser_id_: %s' % escape(bid)) return bid # fall through & ck form/cookie namespaces if bid is not in request. tk = self.browserid_name ns = self.browserid_namespaces for name in ns: if name == 'url': continue # browser ids in url are checked by Traverser class current_ns = getattr(REQUEST, name, None) if current_ns is None: continue bid = current_ns.get(tk, None) if bid is not None: # hey, we got a browser id! if isAWellFormedBrowserId(bid): # bid is not "plain old broken" REQUEST.browser_id_ = bid REQUEST.browser_id_ns_ = name return bid # fall through if bid is invalid or not in namespaces if create: # create a brand new bid bid = getNewBrowserId() if 'cookies' in ns: self._setCookie(bid, REQUEST) REQUEST.browser_id_ = bid REQUEST.browser_id_ns_ = None return bid
def setCookiePath(self, path=''): """ sets cookie 'path' element for id cookie """ if not (type(path) is type('') and not badcookiecharsin(path)): raise BrowserIdManagerErr('Bad cookie path %s' % escape(repr(path))) self.cookie_path = path