On Sat, Mar 15, 2014 at 04:55:17PM +0100, Enrico Zini wrote:

> I tried JavaScript code like this to speed up multi-federation logout,
> but it fails because dacs_signout does not set CORS headers:

This is a tested alternative script to dacs_signout that can perform
logout over AJAX:

  #!/usr/bin/python
  
  from __future__ import print_function
  from __future__ import absolute_import
  from __future__ import division
  from __future__ import unicode_literals
  import os
  import re
  import sys

  origin = os.environ.get("HTTP_ORIGIN", None)
  if origin not in ["https://www.example.org";, "http://www.example.com"]:
      origin = None

  try:
      cookie_names = []
      re_find_cookies = re.compile(r"(?P<key>[^ =]+)=(?P<value>[^;]+)\s*")
      for mo in re_find_cookies.finditer(os.environ.get("HTTP_COOKIE", "")):
          key = mo.group("key")
          if not key.startswith("DACS"): continue
          cookie_names.append(key)
  except Exception as e:
      print("Status: 500")
      print("Content-Type: text/plain")
      print("Access-Control-Allow-Origin: " + origin)
      print()
      print(e)
      sys.exit(0)
  
  print("Status: 200")
  if origin is not None:
      print("Access-Control-Allow-Origin: " + origin)
      print("Access-Control-Allow-Credentials: true")
  
  for key in cookie_names:
      print("Set-Cookie: {}=deleted; path=/; expires=Thu, 01-Jan-1970 00:00:01 
GMT;".format(key))
  print()
  if cookie_names:
      print("logged out.")
  else:
      print("not previously logged in.")
  sys.exit(0)


Ciao,

Enrico

-- 
GPG key: 4096R/E7AD5568 2009-05-08 Enrico Zini <enr...@enricozini.org>

Attachment: signature.asc
Description: Digital signature

Reply via email to