@@ -80,6 +80,7 @@ def _expiration(timeout, tformat="%a, %d-%b-%Y %H:%M:%S GMT"):
80
80
def dict2list_of_tuples (d ):
81
81
return [(k , v ) for k , v in d .items ()]
82
82
83
+
83
84
# -----------------------------------------------------------------------------
84
85
85
86
@@ -96,22 +97,22 @@ def unpack_redirect(self):
96
97
return dict ([(k , v [0 ]) for k , v in parse_qs (_qs ).items ()])
97
98
else :
98
99
return None
99
-
100
+
100
101
def unpack_post (self ):
101
102
_dict = parse_qs (get_post (self .environ ))
102
103
logger .debug ("unpack_post:: %s" % _dict )
103
104
try :
104
105
return dict ([(k , v [0 ]) for k , v in _dict .items ()])
105
106
except Exception :
106
107
return None
107
-
108
+
108
109
def unpack_soap (self ):
109
110
try :
110
111
query = get_post (self .environ )
111
112
return {"SAMLRequest" : query , "RelayState" : "" }
112
113
except Exception :
113
114
return None
114
-
115
+
115
116
def unpack_either (self ):
116
117
if self .environ ["REQUEST_METHOD" ] == "GET" :
117
118
_dict = self .unpack_redirect ()
@@ -124,7 +125,7 @@ def unpack_either(self):
124
125
125
126
def operation (self , saml_msg , binding ):
126
127
logger .debug ("_operation: %s" % saml_msg )
127
- if not saml_msg or not 'SAMLRequest' in saml_msg :
128
+ if not ( saml_msg and 'SAMLRequest' in saml_msg ) :
128
129
resp = BadRequest ('Error parsing request or no request' )
129
130
return resp (self .environ , self .start_response )
130
131
else :
@@ -136,7 +137,8 @@ def operation(self, saml_msg, binding):
136
137
encrypt_cert = _encrypt_cert )
137
138
except KeyError :
138
139
# Can live with no relay state # TODO or can we, for inacademia?
139
- return self .do (saml_msg ["SAMLRequest" ], binding , saml_msg ["RelayState" ])
140
+ return self .do (saml_msg ["SAMLRequest" ], binding ,
141
+ saml_msg ["RelayState" ])
140
142
141
143
def artifact_operation (self , saml_msg ):
142
144
if not saml_msg :
@@ -302,7 +304,7 @@ def do(self, query, binding_in, relay_state="", encrypt_cert=None):
302
304
303
305
if not _resp :
304
306
identity = USERS [self .user ].copy ()
305
- #identity["eduPersonTargetedID"] = get_eptid(IDP, query, session)
307
+ # identity["eduPersonTargetedID"] = get_eptid(IDP, query, session)
306
308
logger .info ("Identity: %s" % (identity ,))
307
309
308
310
if REPOZE_ID_EQUIVALENT :
@@ -367,7 +369,8 @@ def redirect(self):
367
369
368
370
_req = self .req_info .message
369
371
370
- if "SigAlg" in saml_msg and "Signature" in saml_msg : # Signed request
372
+ if "SigAlg" in saml_msg and "Signature" in saml_msg : # Signed
373
+ # request
371
374
issuer = _req .issuer .text
372
375
_certs = IDP .metadata .certs (issuer , "any" , "signing" )
373
376
verified_ok = False
@@ -381,7 +384,7 @@ def redirect(self):
381
384
382
385
if self .user :
383
386
if _req .force_authn is not None and \
384
- _req .force_authn .lower () == 'true' :
387
+ _req .force_authn .lower () == 'true' :
385
388
saml_msg ["req_info" ] = self .req_info
386
389
key = self ._store_request (saml_msg )
387
390
return self .not_authn (key , _req .requested_authn_context )
@@ -425,7 +428,7 @@ def post(self):
425
428
return self .operation (saml_msg , BINDING_HTTP_POST )
426
429
427
430
# def artifact(self):
428
- # # Can be either by HTTP_Redirect or HTTP_POST
431
+ # # Can be either by HTTP_Redirect or HTTP_POST
429
432
# _req = self._store_request(self.unpack_either())
430
433
# if isinstance(_req, basestring):
431
434
# return self.not_authn(_req)
@@ -448,7 +451,7 @@ def ecp(self):
448
451
self .user = user
449
452
self .environ [
450
453
"idp.authn" ] = AUTHN_BROKER .get_authn_by_accr (
451
- PASSWORD )
454
+ PASSWORD )
452
455
except ValueError :
453
456
resp = Unauthorized ()
454
457
else :
@@ -465,6 +468,7 @@ def ecp(self):
465
468
self .op_type = "ecp"
466
469
return self .operation (_dict , BINDING_SOAP )
467
470
471
+
468
472
# -----------------------------------------------------------------------------
469
473
# === Authentication ====
470
474
# -----------------------------------------------------------------------------
@@ -490,11 +494,11 @@ def do_authentication(environ, start_response, authn_context, key,
490
494
# -----------------------------------------------------------------------------
491
495
492
496
PASSWD = {
493
- "daev0001" : "qwerty" ,
494
- "haho0032" : "qwerty" ,
495
- "roland" : "dianakra" ,
496
- "babs" : "howes" ,
497
- "upper" : "crust" }
497
+ "daev0001" : "qwerty" ,
498
+ "haho0032" : "qwerty" ,
499
+ "roland" : "dianakra" ,
500
+ "babs" : "howes" ,
501
+ "upper" : "crust" }
498
502
499
503
500
504
def username_password_authn (environ , start_response , reference , key ,
@@ -568,7 +572,7 @@ def not_found(environ, start_response):
568
572
# === Single log out ===
569
573
# -----------------------------------------------------------------------------
570
574
571
- #def _subject_sp_info(req_info):
575
+ # def _subject_sp_info(req_info):
572
576
# # look for the subject
573
577
# subject = req_info.subject_id()
574
578
# subject = subject.text.strip()
@@ -615,13 +619,13 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
615
619
response = True
616
620
617
621
try :
618
- hinfo = IDP .apply_binding (binding , "%s" % resp , destination , relay_state ,
619
- response = response )
622
+ hinfo = IDP .apply_binding (binding , "%s" % resp , destination ,
623
+ relay_state , response = response )
620
624
except Exception as exc :
621
625
logger .error ("ServiceError: %s" % exc )
622
626
resp = ServiceError ("%s" % exc )
623
627
return resp (self .environ , self .start_response )
624
-
628
+
625
629
#_tlh = dict2list_of_tuples(hinfo["headers"])
626
630
delco = delete_cookie (self .environ , "idpauthn" )
627
631
if delco :
@@ -639,35 +643,36 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
639
643
else :
640
644
resp = Response (hinfo ["data" ], headers = hinfo ["headers" ])
641
645
return resp (self .environ , self .start_response )
642
-
646
+
647
+
643
648
# ----------------------------------------------------------------------------
644
649
# Manage Name ID service
645
650
# ----------------------------------------------------------------------------
646
651
647
652
648
653
class NMI (Service ):
649
-
650
654
def do (self , query , binding , relay_state = "" , encrypt_cert = None ):
651
655
logger .info ("--- Manage Name ID Service ---" )
652
656
req = IDP .parse_manage_name_id_request (query , binding )
653
657
request = req .message
654
-
658
+
655
659
# Do the necessary stuff
656
660
name_id = IDP .ident .handle_manage_name_id_request (
657
661
request .name_id , request .new_id , request .new_encrypted_id ,
658
662
request .terminate )
659
-
663
+
660
664
logger .debug ("New NameID: %s" % name_id )
661
-
665
+
662
666
_resp = IDP .create_manage_name_id_response (request )
663
-
667
+
664
668
# It's using SOAP binding
665
669
hinfo = IDP .apply_binding (BINDING_SOAP , "%s" % _resp , "" ,
666
670
relay_state , response = True )
667
-
671
+
668
672
resp = Response (hinfo ["data" ], headers = hinfo ["headers" ])
669
673
return resp (self .environ , self .start_response )
670
-
674
+
675
+
671
676
# ----------------------------------------------------------------------------
672
677
# === Assertion ID request ===
673
678
# ----------------------------------------------------------------------------
@@ -683,9 +688,9 @@ def do(self, aid, binding, relay_state="", encrypt_cert=None):
683
688
except Unknown :
684
689
resp = NotFound (aid )
685
690
return resp (self .environ , self .start_response )
686
-
691
+
687
692
hinfo = IDP .apply_binding (BINDING_URI , "%s" % assertion , response = True )
688
-
693
+
689
694
logger .debug ("HINFO: %s" % hinfo )
690
695
resp = Response (hinfo ["data" ], headers = hinfo ["headers" ])
691
696
return resp (self .environ , self .start_response )
@@ -715,6 +720,7 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
715
720
resp = Response (hinfo ["data" ], headers = hinfo ["headers" ])
716
721
return resp (self .environ , self .start_response )
717
722
723
+
718
724
# ----------------------------------------------------------------------------
719
725
# === Authn query service ===
720
726
# ----------------------------------------------------------------------------
@@ -769,6 +775,7 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
769
775
resp = Response (hinfo ["data" ], headers = hinfo ["headers" ])
770
776
return resp (self .environ , self .start_response )
771
777
778
+
772
779
# ----------------------------------------------------------------------------
773
780
# Name ID Mapping service
774
781
# When an entity that shares an identifier for a principal with an identity
@@ -792,17 +799,17 @@ def do(self, query, binding, relay_state="", encrypt_cert=None):
792
799
except PolicyError :
793
800
resp = BadRequest ("Unknown entity" )
794
801
return resp (self .environ , self .start_response )
795
-
802
+
796
803
info = IDP .response_args (request )
797
804
_resp = IDP .create_name_id_mapping_response (name_id , ** info )
798
-
805
+
799
806
# Only SOAP
800
807
hinfo = IDP .apply_binding (BINDING_SOAP , "%s" % _resp , "" , "" ,
801
808
response = True )
802
-
809
+
803
810
resp = Response (hinfo ["data" ], headers = hinfo ["headers" ])
804
811
return resp (self .environ , self .start_response )
805
-
812
+
806
813
807
814
# ----------------------------------------------------------------------------
808
815
# Cookie handling
@@ -897,10 +904,10 @@ def metadata(environ, start_response):
897
904
try :
898
905
path = args .path
899
906
if path is None or len (path ) == 0 :
900
- path = os .path .dirname (os .path .abspath ( __file__ ))
907
+ path = os .path .dirname (os .path .abspath (__file__ ))
901
908
if path [- 1 ] != "/" :
902
909
path += "/"
903
- metadata = create_metadata_string (path + args .config , IDP .config ,
910
+ metadata = create_metadata_string (path + args .config , IDP .config ,
904
911
args .valid , args .cert , args .keyfile ,
905
912
args .id , args .name , args .sign )
906
913
start_response ('200 OK' , [('Content-Type' , "text/xml" )])
@@ -961,7 +968,6 @@ def application(environ, start_response):
961
968
except KeyError :
962
969
user = None
963
970
964
-
965
971
url_patterns = AUTHN_URLS
966
972
if not user :
967
973
logger .info ("-- No USER --" )
@@ -995,7 +1001,8 @@ def application(environ, start_response):
995
1001
parser = argparse .ArgumentParser ()
996
1002
parser .add_argument ('-p' , dest = 'path' , help = 'Path to configuration file.' )
997
1003
parser .add_argument ('-v' , dest = 'valid' ,
998
- help = "How long, in days, the metadata is valid from the time of creation" )
1004
+ help = "How long, in days, the metadata is valid from "
1005
+ "the time of creation" )
999
1006
parser .add_argument ('-c' , dest = 'cert' , help = 'certificate' )
1000
1007
parser .add_argument ('-i' , dest = 'id' ,
1001
1008
help = "The ID of the entities descriptor" )
0 commit comments