Skip to content

Commit 5e8504c

Browse files
author
Erick Tryzelaar
committed
Fix example/idp2 logging out with SOAP, POST, or REDIRECT
1 parent 1e0b34a commit 5e8504c

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

example/idp2/idp.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -570,9 +570,8 @@ class SLO(Service):
570570
def do(self, request, binding, relay_state="", encrypt_cert=None):
571571
logger.info("--- Single Log Out Service ---")
572572
try:
573-
_, body = request.split("\n")
574-
logger.debug("req: '%s'" % body)
575-
req_info = IDP.parse_logout_request(body, binding)
573+
logger.debug("req: '%s'" % request)
574+
req_info = IDP.parse_logout_request(request, binding)
576575
except Exception as exc:
577576
logger.error("Bad request: %s" % exc)
578577
resp = BadRequest("%s" % exc)
@@ -596,9 +595,19 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
596595
return resp(self.environ, self.start_response)
597596

598597
resp = IDP.create_logout_response(msg, [binding])
598+
599+
if binding == BINDING_SOAP:
600+
destination = ""
601+
response = False
602+
else:
603+
binding, destination = IDP.pick_binding("single_logout_service",
604+
[binding], "spsso",
605+
req_info)
606+
response = True
599607

600608
try:
601-
hinfo = IDP.apply_binding(binding, "%s" % resp, "", relay_state)
609+
hinfo = IDP.apply_binding(binding, "%s" % resp, destination, relay_state,
610+
response=response)
602611
except Exception as exc:
603612
logger.error("ServiceError: %s" % exc)
604613
resp = ServiceError("%s" % exc)
@@ -609,8 +618,18 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
609618
if delco:
610619
hinfo["headers"].append(delco)
611620
logger.info("Header: %s" % (hinfo["headers"],))
612-
resp = Response(hinfo["data"], headers=hinfo["headers"])
613-
return resp(self.environ, self.start_response)
621+
622+
if binding == BINDING_HTTP_REDIRECT:
623+
for key, value in hinfo['headers']:
624+
if key.lower() == 'location':
625+
resp = Redirect(value, headers=hinfo["headers"])
626+
return resp(self.environ, self.start_response)
627+
628+
resp = ServiceError('missing Location header')
629+
return resp(self.environ, self.start_response)
630+
else:
631+
resp = Response(hinfo["data"], headers=hinfo["headers"])
632+
return resp(self.environ, self.start_response)
614633

615634
# ----------------------------------------------------------------------------
616635
# Manage Name ID service

0 commit comments

Comments
 (0)