Source code for scrolls.views.authentication

from pyramid.httpexceptions import HTTPFound, HTTPForbidden
from pyramid.view import view_config, view_defaults
from pyramid.security import remember, forget


@view_defaults(context='scrolls.models.root.Root', renderer='login.jinja2')
[docs]class AuthenticationView(object): def __init__(self, request): self.request = request self.security = self.request.dependencies.getSecurity() self.config = self.request.dependencies.getConfiguration() @view_config(context=HTTPForbidden)
[docs] def get_forbidden(self): login_url = self.request.resource_url(self.request.root, 'login') return HTTPFound(login_url)
@view_config(name='login', request_method='GET')
[docs] def get_login(self): if self.request.user_logged_in: raise HTTPFound(self.context_url()) return {'failedAttempt': False}
@view_config(name='login', request_method='POST')
[docs] def post_login(self): self.get_login() password = self.request.POST.get('password') hashed = self.security.hashPassword(password) if hashed == self.config.hashed_password: headers = remember(self.request, 'user', max_age=str(60*60*24*7)) raise HTTPFound(self.context_url(), headers=headers) return {'failedAttempt': True}
@view_config(name='logout', request_method='POST')
[docs] def post_logout(self): headers = forget(self.request) raise HTTPFound(self.context_url('login'), headers=headers)
[docs] def context_url(self, *elements, **kw): return self.request.resource_url(self.request.context, *elements, **kw)