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
|
import edbob
|
||||||
from edbob.db.auth import authenticate_user
|
from edbob.db.auth import authenticate_user
|
||||||
from edbob.pyramid import Session
|
from edbob.pyramid import Session
|
||||||
|
from edbob.pyramid.util import get_referer
|
||||||
|
|
||||||
|
|
||||||
class UserLogin(formencode.Schema):
|
class UserLogin(formencode.Schema):
|
||||||
|
@ -44,20 +45,12 @@ class UserLogin(formencode.Schema):
|
||||||
password = formencode.validators.NotEmpty()
|
password = formencode.validators.NotEmpty()
|
||||||
|
|
||||||
|
|
||||||
def login(context, request):
|
def login(request):
|
||||||
"""
|
"""
|
||||||
The login view, responsible for displaying and handling the login form.
|
The login view, responsible for displaying and handling the login form.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if request.params.get('referer'):
|
referer = get_referer(request)
|
||||||
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'))
|
|
||||||
|
|
||||||
# Redirect if already logged in.
|
# Redirect if already logged in.
|
||||||
if request.user:
|
if request.user:
|
||||||
|
@ -85,7 +78,7 @@ def login(context, request):
|
||||||
'logo_url': url, 'logo_kwargs': kwargs}
|
'logo_url': url, 'logo_kwargs': kwargs}
|
||||||
|
|
||||||
|
|
||||||
def logout(context, request):
|
def logout(request):
|
||||||
"""
|
"""
|
||||||
View responsible for logging out the current user.
|
View responsible for logging out the current user.
|
||||||
|
|
||||||
|
@ -96,16 +89,7 @@ def logout(context, request):
|
||||||
request.session.delete()
|
request.session.delete()
|
||||||
request.session.invalidate()
|
request.session.invalidate()
|
||||||
headers = forget(request)
|
headers = forget(request)
|
||||||
|
referer = get_referer(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')
|
|
||||||
|
|
||||||
return HTTPFound(location=referer, headers=headers)
|
return HTTPFound(location=referer, headers=headers)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue