5
5
import logging
6
6
import os
7
7
import re
8
- import socket
9
8
import time
10
- import ssl
11
9
12
10
from Cookie import SimpleCookie
13
11
from hashlib import sha1
@@ -92,7 +90,7 @@ def dict2list_of_tuples(d):
92
90
class Service (object ):
93
91
def __init__ (self , environ , start_response , user = None ):
94
92
self .environ = environ
95
- logger .debug ("ENVIRON: %s" % environ )
93
+ logger .debug ("ENVIRON: %s" , environ )
96
94
self .start_response = start_response
97
95
self .user = user
98
96
@@ -105,7 +103,7 @@ def unpack_redirect(self):
105
103
106
104
def unpack_post (self ):
107
105
_dict = parse_qs (get_post (self .environ ))
108
- logger .debug ("unpack_post:: %s" % _dict )
106
+ logger .debug ("unpack_post:: %s" , _dict )
109
107
try :
110
108
return dict ([(k , v [0 ]) for k , v in _dict .items ()])
111
109
except Exception :
@@ -125,11 +123,11 @@ def unpack_either(self):
125
123
_dict = self .unpack_post ()
126
124
else :
127
125
_dict = None
128
- logger .debug ("_dict: %s" % _dict )
126
+ logger .debug ("_dict: %s" , _dict )
129
127
return _dict
130
128
131
129
def operation (self , saml_msg , binding ):
132
- logger .debug ("_operation: %s" % saml_msg )
130
+ logger .debug ("_operation: %s" , saml_msg )
133
131
if not (saml_msg and 'SAMLRequest' in saml_msg ):
134
132
resp = BadRequest ('Error parsing request or no request' )
135
133
return resp (self .environ , self .start_response )
@@ -211,7 +209,7 @@ def soap(self):
211
209
"""
212
210
logger .debug ("- SOAP -" )
213
211
_dict = self .unpack_soap ()
214
- logger .debug ("_dict: %s" % _dict )
212
+ logger .debug ("_dict: %s" , _dict )
215
213
return self .operation (_dict , BINDING_SOAP )
216
214
217
215
def uri (self ):
@@ -274,19 +272,19 @@ def verify_request(self, query, binding):
274
272
275
273
logger .info ("parsed OK" )
276
274
_authn_req = self .req_info .message
277
- logger .debug ("%s" % _authn_req )
275
+ logger .debug ("%s" , _authn_req )
278
276
279
277
try :
280
278
self .binding_out , self .destination = IDP .pick_binding (
281
279
"assertion_consumer_service" ,
282
280
bindings = self .response_bindings ,
283
281
entity_id = _authn_req .issuer .text , request = _authn_req )
284
282
except Exception as err :
285
- logger .error ("Couldn't find receiver endpoint: %s" % err )
283
+ logger .error ("Couldn't find receiver endpoint: %s" , err )
286
284
raise
287
285
288
- logger .debug ("Binding: %s, destination: %s" % ( self .binding_out ,
289
- self .destination ))
286
+ logger .debug ("Binding: %s, destination: %s" , self .binding_out ,
287
+ self .destination )
290
288
291
289
resp_args = {}
292
290
try :
@@ -314,18 +312,18 @@ def do(self, query, binding_in, relay_state="", encrypt_cert=None,
314
312
try :
315
313
resp_args , _resp = self .verify_request (query , binding_in )
316
314
except UnknownPrincipal as excp :
317
- logger .error ("UnknownPrincipal: %s" % ( excp ,) )
315
+ logger .error ("UnknownPrincipal: %s" , excp )
318
316
resp = ServiceError ("UnknownPrincipal: %s" % (excp ,))
319
317
return resp (self .environ , self .start_response )
320
318
except UnsupportedBinding as excp :
321
- logger .error ("UnsupportedBinding: %s" % ( excp ,) )
319
+ logger .error ("UnsupportedBinding: %s" , excp )
322
320
resp = ServiceError ("UnsupportedBinding: %s" % (excp ,))
323
321
return resp (self .environ , self .start_response )
324
322
325
323
if not _resp :
326
324
identity = USERS [self .user ].copy ()
327
325
# identity["eduPersonTargetedID"] = get_eptid(IDP, query, session)
328
- logger .info ("Identity: %s" % ( identity ,) )
326
+ logger .info ("Identity: %s" , identity )
329
327
330
328
if REPOZE_ID_EQUIVALENT :
331
329
identity [REPOZE_ID_EQUIVALENT ] = self .user
@@ -346,7 +344,7 @@ def do(self, query, binding_in, relay_state="", encrypt_cert=None,
346
344
resp = ServiceError ("Exception: %s" % (excp ,))
347
345
return resp (self .environ , self .start_response )
348
346
349
- logger .info ("AuthNResponse: %s" % _resp )
347
+ logger .info ("AuthNResponse: %s" , _resp )
350
348
if self .op_type == "ecp" :
351
349
kwargs = {"soap_headers" : [
352
350
ecp .Response (
@@ -358,12 +356,12 @@ def do(self, query, binding_in, relay_state="", encrypt_cert=None,
358
356
"%s" % _resp , self .destination ,
359
357
relay_state , response = True , ** kwargs )
360
358
361
- logger .debug ("HTTPargs: %s" % http_args )
359
+ logger .debug ("HTTPargs: %s" , http_args )
362
360
return self .response (self .binding_out , http_args )
363
361
364
362
@staticmethod
365
363
def _store_request (saml_msg ):
366
- logger .debug ("_store_request: %s" % saml_msg )
364
+ logger .debug ("_store_request: %s" , saml_msg )
367
365
key = sha1 (saml_msg ["SAMLRequest" ]).hexdigest ()
368
366
# store the AuthnRequest
369
367
IDP .ticket [key ] = saml_msg
@@ -509,7 +507,7 @@ def do_authentication(environ, start_response, authn_context, key,
509
507
510
508
if len (auth_info ):
511
509
method , reference = auth_info [0 ]
512
- logger .debug ("Authn chosen: %s (ref=%s)" % ( method , reference ) )
510
+ logger .debug ("Authn chosen: %s (ref=%s)" , method , reference )
513
511
return method (environ , start_response , reference , key , redirect_uri , headers )
514
512
else :
515
513
resp = Unauthorized ("No usable authentication method" )
@@ -547,7 +545,7 @@ def username_password_authn(environ, start_response, reference, key,
547
545
"authn_reference" : reference ,
548
546
"redirect_uri" : redirect_uri
549
547
}
550
- logger .info ("do_authentication argv: %s" % argv )
548
+ logger .info ("do_authentication argv: %s" , argv )
551
549
return resp (environ , start_response , ** argv )
552
550
553
551
@@ -563,7 +561,7 @@ def verify_username_and_password(dic):
563
561
def do_verify (environ , start_response , _ ):
564
562
query = parse_qs (get_post (environ ))
565
563
566
- logger .debug ("do_verify: %s" % query )
564
+ logger .debug ("do_verify: %s" , query )
567
565
568
566
try :
569
567
_ok , user = verify_username_and_password (query )
@@ -577,13 +575,13 @@ def do_verify(environ, start_response, _):
577
575
uid = rndstr (24 )
578
576
IDP .cache .uid2user [uid ] = user
579
577
IDP .cache .user2uid [user ] = uid
580
- logger .debug ("Register %s under '%s'" % ( user , uid ) )
578
+ logger .debug ("Register %s under '%s'" , user , uid )
581
579
582
580
kaka = set_cookie ("idpauthn" , "/" , uid , query ["authn_reference" ][0 ])
583
581
584
582
lox = "%s?id=%s&key=%s" % (query ["redirect_uri" ][0 ], uid ,
585
583
query ["key" ][0 ])
586
- logger .debug ("Redirect => %s" % lox )
584
+ logger .debug ("Redirect => %s" , lox )
587
585
resp = Redirect (lox , headers = [kaka ], content = "text/html" )
588
586
589
587
return resp (environ , start_response )
@@ -611,17 +609,17 @@ def do(self, request, binding, relay_state="", encrypt_cert=None, **kwargs):
611
609
612
610
logger .info ("--- Single Log Out Service ---" )
613
611
try :
614
- logger .debug ("req: '%s'" % request )
612
+ logger .debug ("req: '%s'" , request )
615
613
req_info = IDP .parse_logout_request (request , binding )
616
614
except Exception as exc :
617
- logger .error ("Bad request: %s" % exc )
615
+ logger .error ("Bad request: %s" , exc )
618
616
resp = BadRequest ("%s" % exc )
619
617
return resp (self .environ , self .start_response )
620
618
621
619
msg = req_info .message
622
620
if msg .name_id :
623
621
lid = IDP .ident .find_local_id (msg .name_id )
624
- logger .info ("local identifier: %s" % lid )
622
+ logger .info ("local identifier: %s" , lid )
625
623
if lid in IDP .cache .user2uid :
626
624
uid = IDP .cache .user2uid [lid ]
627
625
if uid in IDP .cache .uid2user :
@@ -631,8 +629,8 @@ def do(self, request, binding, relay_state="", encrypt_cert=None, **kwargs):
631
629
try :
632
630
IDP .session_db .remove_authn_statements (msg .name_id )
633
631
except KeyError as exc :
634
- logger .error ("Unknown session: %s" % exc )
635
- resp = ServiceError ("Unknown session: %s" % exc )
632
+ logger .error ("Unknown session: %s" , exc )
633
+ resp = ServiceError ("Unknown session: %s" , exc )
636
634
return resp (self .environ , self .start_response )
637
635
638
636
resp = IDP .create_logout_response (msg , [binding ])
@@ -650,15 +648,15 @@ def do(self, request, binding, relay_state="", encrypt_cert=None, **kwargs):
650
648
hinfo = IDP .apply_binding (binding , "%s" % resp , destination ,
651
649
relay_state , response = response )
652
650
except Exception as exc :
653
- logger .error ("ServiceError: %s" % exc )
651
+ logger .error ("ServiceError: %s" , exc )
654
652
resp = ServiceError ("%s" % exc )
655
653
return resp (self .environ , self .start_response )
656
654
657
655
#_tlh = dict2list_of_tuples(hinfo["headers"])
658
656
delco = delete_cookie (self .environ , "idpauthn" )
659
657
if delco :
660
658
hinfo ["headers" ].append (delco )
661
- logger .info ("Header: %s" % (hinfo ["headers" ],))
659
+ logger .info ("Header: %s" , (hinfo ["headers" ],))
662
660
663
661
if binding == BINDING_HTTP_REDIRECT :
664
662
for key , value in hinfo ['headers' ]:
@@ -689,7 +687,7 @@ def do(self, query, binding, relay_state="", encrypt_cert=None):
689
687
request .name_id , request .new_id , request .new_encrypted_id ,
690
688
request .terminate )
691
689
692
- logger .debug ("New NameID: %s" % name_id )
690
+ logger .debug ("New NameID: %s" , name_id )
693
691
694
692
_resp = IDP .create_manage_name_id_response (request )
695
693
@@ -719,12 +717,12 @@ def do(self, aid, binding, relay_state="", encrypt_cert=None):
719
717
720
718
hinfo = IDP .apply_binding (BINDING_URI , "%s" % assertion , response = True )
721
719
722
- logger .debug ("HINFO: %s" % hinfo )
720
+ logger .debug ("HINFO: %s" , hinfo )
723
721
resp = Response (hinfo ["data" ], headers = hinfo ["headers" ])
724
722
return resp (self .environ , self .start_response )
725
723
726
724
def operation (self , _dict , binding , ** kwargs ):
727
- logger .debug ("_operation: %s" % _dict )
725
+ logger .debug ("_operation: %s" , _dict )
728
726
if not _dict or "ID" not in _dict :
729
727
resp = BadRequest ('Error parsing request or no request' )
730
728
return resp (self .environ , self .start_response )
@@ -765,7 +763,7 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
765
763
_query .requested_authn_context ,
766
764
_query .session_index )
767
765
768
- logger .debug ("response: %s" % msg )
766
+ logger .debug ("response: %s" , msg )
769
767
hinfo = IDP .apply_binding (BINDING_SOAP , "%s" % msg , "" , "" ,
770
768
response = True )
771
769
@@ -788,15 +786,15 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
788
786
789
787
name_id = _query .subject .name_id
790
788
uid = name_id .text
791
- logger .debug ("Local uid: %s" % uid )
789
+ logger .debug ("Local uid: %s" , uid )
792
790
identity = EXTRA [uid ]
793
791
794
792
# Comes in over SOAP so only need to construct the response
795
793
args = IDP .response_args (_query , [BINDING_SOAP ])
796
794
msg = IDP .create_attribute_response (identity ,
797
795
name_id = name_id , ** args )
798
796
799
- logger .debug ("response: %s" % msg )
797
+ logger .debug ("response: %s" , msg )
800
798
hinfo = IDP .apply_binding (BINDING_SOAP , "%s" % msg , "" , "" ,
801
799
response = True )
802
800
@@ -843,7 +841,7 @@ def do(self, query, binding, relay_state="", encrypt_cert=None):
843
841
# Cookie handling
844
842
# ----------------------------------------------------------------------------
845
843
def info_from_cookie (kaka ):
846
- logger .debug ("KAKA: %s" % kaka )
844
+ logger .debug ("KAKA: %s" , kaka )
847
845
if kaka :
848
846
cookie_obj = SimpleCookie (kaka )
849
847
morsel = cookie_obj .get ("idpauthn" , None )
@@ -860,14 +858,14 @@ def info_from_cookie(kaka):
860
858
861
859
def delete_cookie (environ , name ):
862
860
kaka = environ .get ("HTTP_COOKIE" , '' )
863
- logger .debug ("delete KAKA: %s" % kaka )
861
+ logger .debug ("delete KAKA: %s" , kaka )
864
862
if kaka :
865
863
cookie_obj = SimpleCookie (kaka )
866
864
morsel = cookie_obj .get (name , None )
867
865
cookie = SimpleCookie ()
868
866
cookie [name ] = ""
869
867
cookie [name ]['path' ] = "/"
870
- logger .debug ("Expire: %s" % morsel )
868
+ logger .debug ("Expire: %s" , morsel )
871
869
cookie [name ]["expires" ] = _expiration ("dawn" )
872
870
return tuple (cookie .output ().split (": " , 1 ))
873
871
return None
@@ -878,7 +876,7 @@ def set_cookie(name, _, *args):
878
876
cookie [name ] = base64 .b64encode (":" .join (args ))
879
877
cookie [name ]['path' ] = "/"
880
878
cookie [name ]["expires" ] = _expiration (5 ) # 5 minutes from now
881
- logger .debug ("Cookie expires: %s" % cookie [name ]["expires" ])
879
+ logger .debug ("Cookie expires: %s" , cookie [name ]["expires" ])
882
880
return tuple (cookie .output ().split (": " , 1 ))
883
881
884
882
# ----------------------------------------------------------------------------
@@ -941,7 +939,7 @@ def metadata(environ, start_response):
941
939
start_response ('200 OK' , [('Content-Type' , "text/xml" )])
942
940
return metadata
943
941
except Exception as ex :
944
- logger .error ("An error occured while creating metadata:" + ex .message )
942
+ logger .error ("An error occured while creating metadata: %s" , ex .message )
945
943
return not_found (environ , start_response )
946
944
947
945
@@ -960,7 +958,7 @@ def staticfile(environ, start_response):
960
958
start_response ('200 OK' , [('Content-Type' , "text/xml" )])
961
959
return open (path , 'r' ).read ()
962
960
except Exception as ex :
963
- logger .error ("An error occured while creating metadata:" + ex .message )
961
+ logger .error ("An error occured while creating metadata: %s" , ex .message )
964
962
return not_found (environ , start_response )
965
963
966
964
@@ -972,9 +970,9 @@ def application(environ, start_response):
972
970
the functions from above can access the url placeholders.
973
971
974
972
If nothing matches, call the `not_found` function.
975
-
973
+
976
974
:param environ: The HTTP application environment
977
- :param start_response: The application to run when the handling of the
975
+ :param start_response: The application to run when the handling of the
978
976
request is done
979
977
:return: The response as a list of lines
980
978
"""
@@ -985,7 +983,7 @@ def application(environ, start_response):
985
983
return metadata (environ , start_response )
986
984
987
985
kaka = environ .get ("HTTP_COOKIE" , None )
988
- logger .info ("<application> PATH: %s" % path )
986
+ logger .info ("<application> PATH: %s" , path )
989
987
990
988
if kaka :
991
989
logger .info ("= KAKA =" )
@@ -995,7 +993,7 @@ def application(environ, start_response):
995
993
else :
996
994
try :
997
995
query = parse_qs (environ ["QUERY_STRING" ])
998
- logger .debug ("QUERY: %s" % query )
996
+ logger .debug ("QUERY: %s" , query )
999
997
user = IDP .cache .uid2user [query ["id" ][0 ]]
1000
998
except KeyError :
1001
999
user = None
@@ -1014,7 +1012,7 @@ def application(environ, start_response):
1014
1012
except IndexError :
1015
1013
environ ['myapp.url_args' ] = path
1016
1014
1017
- logger .debug ("Callback: %s" % ( callback ,) )
1015
+ logger .debug ("Callback: %s" , callback )
1018
1016
if isinstance (callback , tuple ):
1019
1017
cls = callback [0 ](environ , start_response , user )
1020
1018
func = getattr (cls , callback [1 ])
@@ -1085,7 +1083,8 @@ def application(environ, start_response):
1085
1083
_https = ""
1086
1084
if CONFIG .HTTPS :
1087
1085
SRV .ssl_adapter = ssl_pyopenssl .pyOpenSSLAdapter (CONFIG .SERVER_CERT ,
1088
- CONFIG .SERVER_KEY , CONFIG .CERT_CHAIN )
1086
+ CONFIG .SERVER_KEY ,
1087
+ CONFIG .CERT_CHAIN )
1089
1088
_https = " using SSL/TLS"
1090
1089
logger .info ("Server starting" )
1091
1090
print ("IDP listening on %s:%s%s" % (HOST , PORT , _https ))
0 commit comments