33 |
33 |
from django.urls import reverse
|
34 |
34 |
from django.utils.http import urlencode
|
35 |
35 |
from django.utils import six
|
36 |
|
from django.utils.encoding import force_text
|
|
36 |
from django.utils.encoding import force_text, force_str
|
37 |
37 |
from django.contrib.auth import REDIRECT_FIELD_NAME
|
38 |
38 |
from django.db import transaction
|
39 |
39 |
from django.utils.translation import ugettext as _
|
... | ... | |
505 |
505 |
class LogoutView(ProfileMixin, LogMixin, View):
|
506 |
506 |
def get(self, request, *args, **kwargs):
|
507 |
507 |
if 'SAMLRequest' in request.GET:
|
508 |
|
return self.idp_logout(request)
|
|
508 |
return self.idp_logout(request, request.META['QUERY_STRING'])
|
509 |
509 |
elif 'SAMLResponse' in request.GET:
|
510 |
510 |
return self.sp_logout_response(request)
|
511 |
511 |
else:
|
512 |
512 |
return self.sp_logout_request(request)
|
513 |
513 |
|
514 |
|
def idp_logout(self, request):
|
|
514 |
def post(self, request, *args, **kwargs):
|
|
515 |
return self.idp_logout(request, force_str(request.body))
|
|
516 |
|
|
517 |
def idp_logout(self, request, msg):
|
515 |
518 |
'''Handle logout request emitted by the IdP'''
|
516 |
519 |
self.profile = logout = utils.create_logout(request)
|
517 |
520 |
try:
|
518 |
|
logout.processRequestMsg(request.META['QUERY_STRING'])
|
|
521 |
logout.processRequestMsg(msg)
|
519 |
522 |
except lasso.Error as e:
|
520 |
523 |
return HttpResponseBadRequest('error processing logout request: %r' % e)
|
521 |
524 |
try:
|
... | ... | |
530 |
533 |
logout.buildResponseMsg()
|
531 |
534 |
except lasso.Error as e:
|
532 |
535 |
return HttpResponseBadRequest('error processing logout request: %r' % e)
|
533 |
|
return HttpResponseRedirect(logout.msgUrl)
|
|
536 |
if logout.msgBody:
|
|
537 |
return HttpResponse(force_text(logout.msgBody), content_type='text/xml')
|
|
538 |
else:
|
|
539 |
return HttpResponseRedirect(logout.msgUrl)
|
534 |
540 |
|
535 |
541 |
def sp_logout_request(self, request):
|
536 |
542 |
'''Launch a logout request to the identity provider'''
|
... | ... | |
586 |
592 |
return HttpResponseRedirect(next_url)
|
587 |
593 |
|
588 |
594 |
|
589 |
|
logout = LogoutView.as_view()
|
|
595 |
logout = csrf_exempt(LogoutView.as_view())
|
590 |
596 |
|
591 |
597 |
|
592 |
598 |
def metadata(request, **kwargs):
|
593 |
|
-
|