def rewrite_uri(self, uri, force_rewrite=False): """Pass on extended Draco URI components.""" if callable(uri): extension = self.m_api.options['extension'] uri = dracouri.uri_from_method(uri, extension) scheme, host, path, query = urimod.parse_uri(uri) if scheme and scheme != 'http': return uri docroot = self.m_request.docroot() extension = self.m_api.options['extension'] servername = self.m_request.servername() parts = dracouri.parse_draco_uri(uri, docroot) if not force_rewrite and (parts[1] and parts[1] != servername) \ or not parts[3].endswith('.' + extension): return uri locale = self.m_request.locale() if hasattr(self.m_api, 'session'): sessionid = self.m_api.session.sessionid() else: sessionid = None if sessionid: sessionid = list(sessionid) # subsession if not default if self.m_rewrite_link_level == 0: sessionid[0] = None if sessionid[1] == 0: sessionid[1] = None # subsession unconditionally elif self.m_rewrite_link_level == 1: sessionid[0] = None session = dump_sessionid(sessionid) else: session = None uri = self.paste_uri(uri, locale=locale, session=session) return uri
def test_roundtrip(self): for i in range(100): sess = util.generate_sessionid() dump = util.dump_sessionid(sess) assert util.issessionid(dump) parsed = util.parse_sessionid(dump) assert sess == parsed for i in range(100): sess = util.generate_sessionid() sess = (sess[0], None) dump = util.dump_sessionid(sess) assert util.issessionid(dump) parsed = util.parse_sessionid(dump) assert sess == parsed for i in range(100): sess = util.generate_sessionid() sess = (None, sess[1]) dump = util.dump_sessionid(sess) assert util.issessionid(dump) parsed = util.parse_sessionid(dump) assert sess == parsed
def new(self): """Create a new session.""" session = SessionObject() sessionid = generate_sessionid() session['id'] = sessionid[0] session['last_subsession'] = sessionid[1] session['principal'] = self.m_security.principal() now = datetime.datetime.now() session['create_date'] = now session['last_used'] = now expire_date = now + datetime.timedelta(seconds=self.m_timeout) session['expire_date'] = expire_date self.m_transaction.insert(session) value = dump_sessionid((sessionid[0], None)) cookie = Cookie('draco-session', value, expires=expire_date, path='/') self.m_response.set_cookie(cookie) self.m_session = session self.m_sessionid = sessionid