Patch CAS redirect parameter in logout view

This commit is contained in:
Ludovic Stephan 2019-11-27 13:03:28 +01:00
parent 14164ec4a5
commit ac4d5cf7d5

View file

@ -2,6 +2,7 @@ import csv
import uuid
from datetime import timedelta
from smtplib import SMTPRecipientsRefused
from urllib.parse import parse_qs, urlencode, urlparse, urlunparse
from custommail.shortcuts import send_custom_mail
from django.contrib import messages
@ -98,6 +99,30 @@ class LoginExtView(DjangoLoginView):
return super().form_invalid(form)
class CustomCasLogoutView(CasLogoutView):
"""
Actuellement, le CAS de l'ENS est pété et n'a pas le bon paramètre GET
pour rediriger après déconnexion. On change la redirection à la main
dans la vue de logout.
"""
def get(self, request):
# CasLogoutView.get() retourne un HttpResponseRedirect
response = super().get(request)
parse_result = urlparse(response.url)
qd = parse_qs(parse_result.query)
if "url" in qd.keys():
# je ne vois pas bien pourquoi il faut un 2e "pop"...
qd["service"] = qd.pop("url").pop()
# La méthode _replace est documentée !
new_url = parse_result._replace(query=urlencode(qd))
print(qd)
print(urlunparse(new_url))
return redirect(urlunparse(new_url))
@login_required
def logout(request, next_page=None):
if next_page is None:
@ -107,7 +132,7 @@ def logout(request, next_page=None):
if profile and profile.login_clipper:
msg = _("Déconnexion de GestioCOF et CAS réussie. À bientôt {}.")
logout_view = CasLogoutView.as_view()
logout_view = CustomCasLogoutView.as_view()
else:
msg = _("Déconnexion de GestioCOF réussie. À bientôt {}.")
logout_view = DjangoLogoutView.as_view(