From 357540255bcc51473b802777d1b1a9b970010944 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 22 Nov 2019 12:39:34 +0100 Subject: [PATCH 7/8] views: use CBV for the login view (#37760) --- passerelle/views.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/passerelle/views.py b/passerelle/views.py index 657693f4..3d494a48 100644 --- a/passerelle/views.py +++ b/passerelle/views.py @@ -40,6 +40,7 @@ from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import force_text from django.forms.models import modelform_factory from django.forms.widgets import ClearableFileInput +from django.utils.six.moves.urllib.parse import quote from dateutil import parser as date_parser from jsonschema import validate, ValidationError @@ -61,12 +62,16 @@ def get_all_apps(): return [x for x in apps.get_models() if issubclass(x, BaseResource) and x.is_enabled()] -def login(request, *args, **kwargs): - if any(get_idps()): - if 'next' not in request.GET: - return HttpResponseRedirect(resolve_url('mellon_login')) - return HttpResponseRedirect(resolve_url('mellon_login') + '?next=' + request.GET.get('next')) - return auth_views.login(request, *args, **kwargs) +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')) + return HttpResponseRedirect(resolve_url('mellon_login') + '?next=' + + quote(request.GET.get('next'))) + return super(LoginView, self).dispatch(request, *args, **kwargs) + +login = LoginView.as_view() def logout(request, next_page=None): -- 2.23.0