@@ -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