add util.get_referer()
This commit is contained in:
parent
5b5b0c8738
commit
881e83e88e
2 changed files with 50 additions and 21 deletions
45
edbob/pyramid/util.py
Normal file
45
edbob/pyramid/util.py
Normal file
|
@ -0,0 +1,45 @@
|
|||
#!/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.util`` -- Utilities
|
||||
"""
|
||||
|
||||
|
||||
def get_referer(request, default=None):
|
||||
"""
|
||||
Returns a "referer" URL.
|
||||
"""
|
||||
|
||||
if request.params.get('referer'):
|
||||
return request.params['referer']
|
||||
if request.session.get('referer'):
|
||||
return request.session.pop('referer')
|
||||
referer = request.referer
|
||||
if not referer or referer == request.current_route_url():
|
||||
if default:
|
||||
referer = default
|
||||
else:
|
||||
referer = request.route_url('home')
|
||||
return referer
|
|
@ -35,6 +35,7 @@ from pyramid_simpleform.renderers import FormRenderer
|
|||
import edbob
|
||||
from edbob.db.auth import authenticate_user
|
||||
from edbob.pyramid import Session
|
||||
from edbob.pyramid.util import get_referer
|
||||
|
||||
|
||||
class UserLogin(formencode.Schema):
|
||||
|
@ -44,20 +45,12 @@ class UserLogin(formencode.Schema):
|
|||
password = formencode.validators.NotEmpty()
|
||||
|
||||
|
||||
def login(context, request):
|
||||
def login(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
|
||||
if not referer or referer == request.route_url('login'):
|
||||
referer = edbob.config.get('edbob.pyramid', 'login.home',
|
||||
default=request.route_url('home'))
|
||||
referer = get_referer(request)
|
||||
|
||||
# Redirect if already logged in.
|
||||
if request.user:
|
||||
|
@ -85,7 +78,7 @@ def login(context, request):
|
|||
'logo_url': url, 'logo_kwargs': kwargs}
|
||||
|
||||
|
||||
def logout(context, request):
|
||||
def logout(request):
|
||||
"""
|
||||
View responsible for logging out the current user.
|
||||
|
||||
|
@ -96,16 +89,7 @@ def logout(context, request):
|
|||
request.session.delete()
|
||||
request.session.invalidate()
|
||||
headers = forget(request)
|
||||
|
||||
if request.params.get('referer'):
|
||||
referer = request.params['referer']
|
||||
elif request.session.get('referer'):
|
||||
referer = request.session.pop('referer')
|
||||
else:
|
||||
referer = request.referer
|
||||
if not referer or referer == request.route_url('logout'):
|
||||
referer = request.route_url('login')
|
||||
|
||||
referer = get_referer(request)
|
||||
return HTTPFound(location=referer, headers=headers)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue