views: pass ?next= to mellon views (#61430)

This commit is contained in:
Benjamin Dauvergne 2022-02-04 13:03:09 +01:00
parent 5accf65139
commit 78a28b6be9
1 changed files with 9 additions and 8 deletions

View File

@ -41,6 +41,7 @@ from django.template import engines
from django.template.loader import TemplateDoesNotExist, get_template
from django.utils import lorem_ipsum, timezone
from django.utils.encoding import force_text
from django.utils.http import urlencode
from django.utils.translation import ugettext as _
from django.views.decorators.csrf import csrf_exempt
from django.views.defaults import page_not_found
@ -70,13 +71,10 @@ else:
class LoginView(auth_views.LoginView):
def dispatch(self, request, *args, **kwargs):
if any(get_idps()):
if 'next' not in request.GET:
return HttpResponseRedirect(resolve_url('mellon_login'))
try:
quoted_next_url = urllib.parse.quote(request.GET.get('next'))
except KeyError:
return HttpResponseBadRequest('invalid value for "next" parameter')
return HttpResponseRedirect(resolve_url('mellon_login') + '?next=' + quoted_next_url)
url = resolve_url('mellon_login')
if 'next' in request.GET:
url += '?' + urlencode({'next': request.GET['next']})
return HttpResponseRedirect(url)
return super().dispatch(request, *args, **kwargs)
@ -85,7 +83,10 @@ login = LoginView.as_view()
def logout(request, next_page=None):
if any(get_idps()):
return HttpResponseRedirect(resolve_url('mellon_logout'))
url = resolve_url('mellon_logout')
if 'next' in request.GET:
url += '?' + urlencode({'next': request.GET['next']})
return HttpResponseRedirect(url)
auth_logout(request)
if next_page is not None:
next_page = resolve_url(next_page)