forked from DGNum/gestioCOF
Merge branch 'Aufinal/fix_cas_redirect' into 'master'
Fix la redirection lors d'un logout CAS See merge request klub-dev-ens/gestioCOF!385
This commit is contained in:
commit
94d5e0f0ac
1 changed files with 33 additions and 3 deletions
|
@ -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():
|
||||
# Le 2e pop est nécessaire car CAS n'aime pas
|
||||
# les paramètres sous forme de liste
|
||||
qd["service"] = qd.pop("url").pop()
|
||||
|
||||
# La méthode _replace est documentée !
|
||||
new_url = parse_result._replace(query=urlencode(qd))
|
||||
|
||||
return redirect(urlunparse(new_url))
|
||||
|
||||
|
||||
@login_required
|
||||
def logout(request, next_page=None):
|
||||
if next_page is None:
|
||||
|
@ -106,15 +131,20 @@ def logout(request, next_page=None):
|
|||
profile = getattr(request.user, "profile", None)
|
||||
|
||||
if profile and profile.login_clipper:
|
||||
msg = _("Déconnexion de GestioCOF et CAS réussie. À bientôt {}.")
|
||||
logout_view = CasLogoutView.as_view()
|
||||
if next_page is None:
|
||||
# On ne voit pas les messages quand on se déconnecte de CAS
|
||||
msg = None
|
||||
else:
|
||||
msg = _("Déconnexion de GestioCOF et CAS réussie. À bientôt {}.")
|
||||
logout_view = CustomCasLogoutView.as_view()
|
||||
else:
|
||||
msg = _("Déconnexion de GestioCOF réussie. À bientôt {}.")
|
||||
logout_view = DjangoLogoutView.as_view(
|
||||
next_page=next_page, template_name="logout.html"
|
||||
)
|
||||
|
||||
messages.success(request, msg.format(request.user.get_short_name()))
|
||||
if msg is not None:
|
||||
messages.success(request, msg.format(request.user.get_short_name()))
|
||||
return logout_view(request)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue