add util.get_referer()

This commit is contained in:
Lance Edgar 2012-08-16 09:06:17 -07:00
parent 5b5b0c8738
commit 881e83e88e
2 changed files with 50 additions and 21 deletions

45
edbob/pyramid/util.py Normal file
View 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

View file

@ -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)