Fixed ?next=<url> argument for require_active_login

It now includes the full URI, including GET args, not just the path.
This commit is contained in:
Joar Wandborg 2012-09-15 21:07:24 +02:00
parent 30520c92cc
commit 3a1993288f
3 changed files with 17 additions and 5 deletions

View File

@ -16,6 +16,9 @@
from functools import wraps from functools import wraps
from urlparse import urljoin
from urllib import urlencode
from webob import exc from webob import exc
from mediagoblin.db.util import ObjectId, InvalidId from mediagoblin.db.util import ObjectId, InvalidId
@ -34,10 +37,16 @@ def require_active_login(controller):
request, 'mediagoblin.user_pages.user_home', request, 'mediagoblin.user_pages.user_home',
user=request.user.username) user=request.user.username)
elif not request.user or request.user.get('status') != u'active': elif not request.user or request.user.get('status') != u'active':
next_url = urljoin(
request.urlgen('mediagoblin.auth.login',
qualified=True),
request.url)
return exc.HTTPFound( return exc.HTTPFound(
location="%s?next=%s" % ( location='?'.join([
request.urlgen("mediagoblin.auth.login"), request.urlgen('mediagoblin.auth.login'),
request.full_path)) urlencode({
'next': next_url})]))
return controller(request, *args, **kwargs) return controller(request, *args, **kwargs)

View File

@ -25,12 +25,13 @@ _log = logging.getLogger(__name__)
PLUGIN_DIR = os.path.dirname(__file__) PLUGIN_DIR = os.path.dirname(__file__)
config = pluginapi.get_config(__name__)
def setup_plugin(): def setup_plugin():
config = pluginapi.get_config(__name__)
_log.info('Setting up API...') _log.info('Setting up API...')
_log.debug('API config: {0}'.format(config))
routes = [ routes = [
Route('mediagoblin.plugins.api.test', '/api/test', Route('mediagoblin.plugins.api.test', '/api/test',
controller='mediagoblin.plugins.api.views:api_test'), controller='mediagoblin.plugins.api.views:api_test'),

View File

@ -33,6 +33,8 @@ from mediagoblin.media_types import sniff_media, InvalidFileType, \
from mediagoblin.plugins.api.tools import api_auth, get_entry_serializable, \ from mediagoblin.plugins.api.tools import api_auth, get_entry_serializable, \
json_response json_response
from mediagoblin.plugins.api import config
_log = logging.getLogger(__name__) _log = logging.getLogger(__name__)