log out from local app when slo idp initiated (#19574)

This commit is contained in:
Josue Kouka 2017-10-19 17:57:02 +02:00
parent 6b9a0b1b5c
commit fee32a4e30
3 changed files with 21 additions and 6 deletions

View File

@ -19,8 +19,10 @@ import json
import subprocess
import logging
import multiprocessing
import urlparse
from django.conf import settings
from django.shortcuts import resolve_url
from Cookie import SimpleCookie
@ -95,7 +97,12 @@ def get_logout_info(request):
data = {}
data['logout_locator'] = getattr(app_settings, 'SITE_LOGOUT_LOCATOR')
data['address'] = request.META.get('HTTP_REFERER')
data['address'] = request.build_absolute_uri(resolve_url('home'))
forced_logout_scheme = getattr(settings, 'PHANTOM_JS_LOGOUT_SCHEME')
if forced_logout_scheme:
url = urlparse.urlparse(data['address'])
url = url._replace(scheme=forced_logout_scheme)
data['address'] = url.geturl()
cookies = SimpleCookie(request.META.get('HTTP_COOKIE'))
domain = request.META.get('SERVER_NAME')

View File

@ -21,7 +21,9 @@ from urlparse import urlparse
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from django.contrib.auth.signals import user_logged_out
from django.contrib import messages
from django.dispatch import receiver
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render, resolve_url
from django.template import RequestContext
@ -50,11 +52,6 @@ def home(request):
def logout(request, *args, **kwargs):
logger.debug("running slo")
data = get_logout_info(request)
logger.debug(data)
logger.debug("running phantomjs logout")
result = exec_phantom(data, script='do_logout.js')
logger.debug(result)
response = mellon_logout(request, *args, **kwargs)
logger.debug("deleting cookies")
for cookie in app_settings.SITE_AUTH_COOKIE_KEYS:
@ -64,6 +61,14 @@ def logout(request, *args, **kwargs):
return response
@receiver(user_logged_out)
def local_logout(sender, request, user, **kwargs):
data = get_logout_info(request)
logger.debug(data)
result = exec_phantom(data, script='do_logout.js')
logger.debug(result)
class Panel(TemplateView):
template_name = 'mandaye/panel.html'

View File

@ -167,6 +167,9 @@ PHANTOM_JS_BINARY = '/usr/bin/phantomjs'
# Default timeout before killing Phantomjs process
PHANTOM_JS_TIMEOUT = 10
# Scheme to use for phantomjs logout
PHANTOM_JS_LOGOUT_SCHEME = None # Default is request scheme
JSONFIELD_ENCODER_CLASS = 'django.core.serializers.json.DjangoJSONEncoder'
local_settings_file = os.environ.get('MANDAYEJS_SETTINGS_FILE',