@@ -121,30 +121,32 @@ def unpack_either(self):
121
121
logger .debug ("_dict: %s" % _dict )
122
122
return _dict
123
123
124
- def operation (self , _dict , binding ):
125
- logger .debug ("_operation: %s" % _dict )
126
- if not _dict or not 'SAMLRequest' in _dict :
124
+ def operation (self , saml_msg , binding ):
125
+ logger .debug ("_operation: %s" % saml_msg )
126
+ if not saml_msg or not 'SAMLRequest' in saml_msg :
127
127
resp = BadRequest ('Error parsing request or no request' )
128
128
return resp (self .environ , self .start_response )
129
129
else :
130
130
try :
131
- _encrypt_cert = encrypt_cert_from_item (_dict ["req_info" ].message )
132
- return self .do (_dict ["SAMLRequest" ], binding ,
133
- _dict ["RelayState" ], encrypt_cert = _encrypt_cert )
131
+ _encrypt_cert = encrypt_cert_from_item (
132
+ saml_msg ["req_info" ].message )
133
+ return self .do (saml_msg ["SAMLRequest" ], binding ,
134
+ saml_msg ["RelayState" ],
135
+ encrypt_cert = _encrypt_cert )
134
136
except KeyError :
135
137
# Can live with no relay state
136
- return self .do (_dict ["SAMLRequest" ], binding )
138
+ return self .do (saml_msg ["SAMLRequest" ], binding )
137
139
138
- def artifact_operation (self , _dict ):
139
- if not _dict :
140
+ def artifact_operation (self , saml_msg ):
141
+ if not saml_msg :
140
142
resp = BadRequest ("Missing query" )
141
143
return resp (self .environ , self .start_response )
142
144
else :
143
145
# exchange artifact for request
144
- request = IDP .artifact2message (_dict ["SAMLart" ], "spsso" )
146
+ request = IDP .artifact2message (saml_msg ["SAMLart" ], "spsso" )
145
147
try :
146
148
return self .do (request , BINDING_HTTP_ARTIFACT ,
147
- _dict ["RelayState" ])
149
+ saml_msg ["RelayState" ])
148
150
except KeyError :
149
151
return self .do (request , BINDING_HTTP_ARTIFACT )
150
152
@@ -188,24 +190,6 @@ def uri(self):
188
190
_dict = self .unpack_either ()
189
191
return self .operation (_dict , BINDING_SOAP )
190
192
191
- # def not_authn(self, key):
192
- # """
193
- #
194
- #
195
- # :return:
196
- # """
197
- # loc = "http://%s/login" % (self.environ["HTTP_HOST"])
198
- # loc += "?%s" % urllib.urlencode({"came_from": self.environ[
199
- # "PATH_INFO"], "key": key})
200
- # headers = [('Content-Type', 'text/plain')]
201
- #
202
- # logger.debug("location: %s" % loc)
203
- # logger.debug("headers: %s" % headers)
204
- #
205
- # resp = Redirect(loc, headers=headers)
206
- #
207
- # return resp(self.environ, self.start_response)
208
-
209
193
def not_authn (self , key , requested_authn_context ):
210
194
ruri = geturl (self .environ , query = False )
211
195
return do_authentication (self .environ , self .start_response ,
@@ -345,40 +329,40 @@ def do(self, query, binding_in, relay_state="", encrypt_cert=None):
345
329
logger .debug ("HTTPargs: %s" % http_args )
346
330
return self .response (self .binding_out , http_args )
347
331
348
- def _store_request (self , _dict ):
349
- logger .debug ("_store_request: %s" % _dict )
350
- key = sha1 (_dict ["SAMLRequest" ]).hexdigest ()
332
+ def _store_request (self , saml_msg ):
333
+ logger .debug ("_store_request: %s" % saml_msg )
334
+ key = sha1 (saml_msg ["SAMLRequest" ]).hexdigest ()
351
335
# store the AuthnRequest
352
- IDP .ticket [key ] = _dict
336
+ IDP .ticket [key ] = saml_msg
353
337
return key
354
338
355
339
def redirect (self ):
356
340
""" This is the HTTP-redirect endpoint """
357
341
358
342
logger .info ("--- In SSO Redirect ---" )
359
- _info = self .unpack_redirect ()
343
+ saml_msg = self .unpack_redirect ()
360
344
361
345
try :
362
- _key = _info ["key" ]
363
- _info = IDP .ticket [_key ]
364
- self .req_info = _info ["req_info" ]
346
+ _key = saml_msg ["key" ]
347
+ saml_msg = IDP .ticket [_key ]
348
+ self .req_info = saml_msg ["req_info" ]
365
349
del IDP .ticket [_key ]
366
350
except KeyError :
367
351
try :
368
- self .req_info = IDP .parse_authn_request (_info ["SAMLRequest" ],
352
+ self .req_info = IDP .parse_authn_request (saml_msg ["SAMLRequest" ],
369
353
BINDING_HTTP_REDIRECT )
370
354
except KeyError :
371
355
resp = BadRequest ("Message signature verification failure" )
372
356
return resp (self .environ , self .start_response )
373
357
374
358
_req = self .req_info .message
375
359
376
- if "SigAlg" in _info and "Signature" in _info : # Signed request
360
+ if "SigAlg" in saml_msg and "Signature" in saml_msg : # Signed request
377
361
issuer = _req .issuer .text
378
362
_certs = IDP .metadata .certs (issuer , "any" , "signing" )
379
363
verified_ok = False
380
364
for cert in _certs :
381
- if verify_redirect_signature (_info , cert ):
365
+ if verify_redirect_signature (saml_msg , cert ):
382
366
verified_ok = True
383
367
break
384
368
if not verified_ok :
@@ -387,37 +371,37 @@ def redirect(self):
387
371
388
372
if self .user :
389
373
if _req .force_authn :
390
- _info ["req_info" ] = self .req_info
391
- key = self ._store_request (_info )
374
+ saml_msg ["req_info" ] = self .req_info
375
+ key = self ._store_request (saml_msg )
392
376
return self .not_authn (key , _req .requested_authn_context )
393
377
else :
394
- return self .operation (_info , BINDING_HTTP_REDIRECT )
378
+ return self .operation (saml_msg , BINDING_HTTP_REDIRECT )
395
379
else :
396
- _info ["req_info" ] = self .req_info
397
- key = self ._store_request (_info )
380
+ saml_msg ["req_info" ] = self .req_info
381
+ key = self ._store_request (saml_msg )
398
382
return self .not_authn (key , _req .requested_authn_context )
399
383
else :
400
- return self .operation (_info , BINDING_HTTP_REDIRECT )
384
+ return self .operation (saml_msg , BINDING_HTTP_REDIRECT )
401
385
402
386
def post (self ):
403
387
"""
404
388
The HTTP-Post endpoint
405
389
"""
406
390
logger .info ("--- In SSO POST ---" )
407
- _info = self .unpack_either ()
391
+ saml_msg = self .unpack_either ()
408
392
self .req_info = IDP .parse_authn_request (
409
- _info ["SAMLRequest" ], BINDING_HTTP_POST )
393
+ saml_msg ["SAMLRequest" ], BINDING_HTTP_POST )
410
394
_req = self .req_info .message
411
395
if self .user :
412
396
if _req .force_authn :
413
- _info ["req_info" ] = self .req_info
414
- key = self ._store_request (_info )
397
+ saml_msg ["req_info" ] = self .req_info
398
+ key = self ._store_request (saml_msg )
415
399
return self .not_authn (key , _req .requested_authn_context )
416
400
else :
417
- return self .operation (_info , BINDING_HTTP_POST )
401
+ return self .operation (saml_msg , BINDING_HTTP_POST )
418
402
else :
419
- _info ["req_info" ] = self .req_info
420
- key = self ._store_request (_info )
403
+ saml_msg ["req_info" ] = self .req_info
404
+ key = self ._store_request (saml_msg )
421
405
return self .not_authn (key , _req .requested_authn_context )
422
406
423
407
# def artifact(self):
0 commit comments