def verify_ticket(ticket_str): now = int(time()) // 60 try: time_str, payload_str, rnd_str, hash_str = ticket_str.split(':') minute = int(time_str, 16) if minute < now - options.MAX_SESSION_MTIME or minute > now + 1: return rnd = b64decode(rnd_str) if len(rnd) != 8: return payload = b64decode(payload_str) hash = b64decode(hash_str) hashobject = get_hashobject(minute) hashobject.update(rnd) hashobject.update(payload) hashobject.update(dumps(local.user)) if hash != hashobject.digest(): hashobject.update('+') if hash != hashobject.digest(): return result = _verify_ticket(minute, rnd) if not result: local.ticket = result; return if payload: payload = decompress(payload) local.ticket = minute, rnd local.ticket_payload = payload or None except: return
def loads(s): type = options.COOKIE_SERIALIZATION_TYPE if type == 'json': return json.loads(decompress(s)) elif type == 'pickle': return cPickle.loads(decompress(s)) else: raise TypeError("Incorrect value of pony.options.COOKIE_SERIALIZATION_TYPE (must be 'json' or 'pickle')")