add initial auth framework
This commit is contained in:
parent
4808857f40
commit
df9524a6ac
12 changed files with 280 additions and 202 deletions
95
edbob/pyramid/views/auth.py
Normal file
95
edbob/pyramid/views/auth.py
Normal file
|
@ -0,0 +1,95 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
################################################################################
|
||||
#
|
||||
# edbob -- Pythonic Software Framework
|
||||
# Copyright © 2010-2012 Lance Edgar
|
||||
#
|
||||
# This file is part of edbob.
|
||||
#
|
||||
# edbob is free software: you can redistribute it and/or modify it under the
|
||||
# terms of the GNU Affero General Public License as published by the Free
|
||||
# Software Foundation, either version 3 of the License, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# edbob is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||
# more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with edbob. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
################################################################################
|
||||
|
||||
"""
|
||||
``edbob.pyramid.views.auth`` -- Auth Views
|
||||
"""
|
||||
|
||||
import formencode
|
||||
from pyramid.view import view_config
|
||||
from pyramid.httpexceptions import HTTPFound
|
||||
from pyramid.security import remember, forget
|
||||
from pyramid_simpleform import Form
|
||||
from pyramid_simpleform.renderers import FormRenderer
|
||||
|
||||
import edbob
|
||||
from edbob.db.auth import authenticate_user
|
||||
from edbob.pyramid import Session
|
||||
|
||||
|
||||
class UserLogin(formencode.Schema):
|
||||
allow_extra_fields = True
|
||||
filter_extra_fields = True
|
||||
username = formencode.validators.NotEmpty()
|
||||
password = formencode.validators.NotEmpty()
|
||||
|
||||
|
||||
@view_config(route_name='login', renderer='/login.mako')
|
||||
def login(context, request):
|
||||
"""
|
||||
The login view, responsible for displaying and handling the login form.
|
||||
"""
|
||||
|
||||
if request.params.get('referer'):
|
||||
referer = request.params['referer']
|
||||
elif request.session.get('referer'):
|
||||
referer = request.session.pop('referer')
|
||||
else:
|
||||
referer = request.referer or request.route_url('home')
|
||||
if referer == request.route_url('login'):
|
||||
referer = request.route_url('home')
|
||||
|
||||
# Redirect if already logged in.
|
||||
if request.user:
|
||||
return HTTPFound(location=referer)
|
||||
|
||||
form = Form(request, schema=UserLogin)
|
||||
if form.validate():
|
||||
user = authenticate_user(form.data['username'],
|
||||
form.data['password'],
|
||||
session=Session())
|
||||
if user:
|
||||
request.session.flash("%s logged in at %s" % (
|
||||
user.display_name,
|
||||
edbob.local_time().strftime('%I:%M %p')))
|
||||
headers = remember(request, user.uuid)
|
||||
return HTTPFound(location=referer, headers=headers)
|
||||
request.session.flash("Invalid username or password")
|
||||
return {'form': FormRenderer(form), 'referer': referer}
|
||||
|
||||
|
||||
@view_config(route_name='logout')
|
||||
def logout(context, request):
|
||||
request.session.delete()
|
||||
request.session.flash("%s logged out at %s" % (
|
||||
request.user.display_name,
|
||||
edbob.local_time().strftime("%I:%M %p")))
|
||||
headers = forget(request)
|
||||
return HTTPFound(location=request.route_url('login'), headers=headers)
|
||||
|
||||
|
||||
def includeme(config):
|
||||
config.add_route('login', '/login')
|
||||
config.add_route('logout', '/logout')
|
||||
config.scan()
|
Loading…
Add table
Add a link
Reference in a new issue