From 881e83e88ec4d5218e953e33219105a91e6f2b74 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Thu, 16 Aug 2012 09:06:17 -0700 Subject: [PATCH] add util.get_referer() --- edbob/pyramid/util.py | 45 +++++++++++++++++++++++++++++++++++++ edbob/pyramid/views/auth.py | 26 +++++---------------- 2 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 edbob/pyramid/util.py diff --git a/edbob/pyramid/util.py b/edbob/pyramid/util.py new file mode 100644 index 0000000..a148fc2 --- /dev/null +++ b/edbob/pyramid/util.py @@ -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 . +# +################################################################################ + +""" +``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 diff --git a/edbob/pyramid/views/auth.py b/edbob/pyramid/views/auth.py index f80a4da..9754faa 100644 --- a/edbob/pyramid/views/auth.py +++ b/edbob/pyramid/views/auth.py @@ -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)