diff --git a/welco/views.py b/welco/views.py index b8d7ae5..7fc6f95 100644 --- a/welco/views.py +++ b/welco/views.py @@ -47,13 +47,23 @@ from .contacts.views import HomeZone as ContactsHomeZone from .forms import QualificationForm -def login(request, *args, **kwargs): - if any(get_idps()): - if not 'next' in request.GET: - return HttpResponseRedirect(resolve_url('mellon_login')) - return HttpResponseRedirect(resolve_url('mellon_login') + '?next=' - + quote(request.GET.get('next'))) - return auth_views.login(request, template_name='welco/login.html') +class LoginView(auth_views.LoginView): + template_name = 'welco/login.html' + + 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 = quote(request.GET.get('next')) + except KeyError: + return HttpResponseBadRequest('invalid value for "next" parameter') + return HttpResponseRedirect(resolve_url('mellon_login') + '?next=' + quoted_next_url) + return super(LoginView, self).dispatch(request, *args, **kwargs) + + +login = LoginView.as_view() + def logout(request, next_page=None): if any(get_idps()):