Source code for ramverk.session

import errno
import os

from werkzeug.contrib.securecookie import SecureCookie
from werkzeug.utils                import cached_property
from ramverk.rendering             import json


[docs]class SecureJSONCookie(SecureCookie): """A :class:`~werkzeug.contrib.securecookie.SecureCookie` serialized as JSON which is safer than pickle.""" serialization_method = json
[docs]class SessionMixin(object): """Environment mixin adding a signed session cookie.""" @cached_property
[docs] def session(self): """A :class:`SecureJSONCookie` signed with the configured :attr:`~settings.secret_key`.""" return SecureJSONCookie.load_cookie( self.request, secret_key=self.application.settings.secret_key)
def respond(self): response = super(SessionMixin, self).respond() self.session.save_cookie(response) return response
[docs]class SecretKey(object): """Lazily read `filename` for a secret key, writing `bytes` random bytes to it if it doesn't exist.""" def __init__(self, filename, bytes=256): self.filename, self.bytes = filename, bytes def __str__(self): try: return self.key except AttributeError: try: with open(self.filename, 'rb') as stream: self.key = stream.read() except IOError as e: if e.errno != errno.ENOENT: raise self.key = os.urandom(self.bytes) with open(self.filename, 'wb') as stream: stream.write(self.key) return self.key

Project Versions