Skip to content

Commit bc93176

Browse files
author
Hans Hörberg
committed
Merge remote-tracking branch 'upstream/master'
# Conflicts: # src/saml2/entity.py digest algorithm added to the same functions as sign alg.
2 parents 8c901a8 + 31f8ce0 commit bc93176

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+783
-550
lines changed

example/idp2/idp.py

Lines changed: 46 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
import logging
66
import os
77
import re
8-
import socket
98
import time
10-
import ssl
119

1210
from Cookie import SimpleCookie
1311
from hashlib import sha1
@@ -92,7 +90,7 @@ def dict2list_of_tuples(d):
9290
class Service(object):
9391
def __init__(self, environ, start_response, user=None):
9492
self.environ = environ
95-
logger.debug("ENVIRON: %s" % environ)
93+
logger.debug("ENVIRON: %s", environ)
9694
self.start_response = start_response
9795
self.user = user
9896

@@ -105,7 +103,7 @@ def unpack_redirect(self):
105103

106104
def unpack_post(self):
107105
_dict = parse_qs(get_post(self.environ))
108-
logger.debug("unpack_post:: %s" % _dict)
106+
logger.debug("unpack_post:: %s", _dict)
109107
try:
110108
return dict([(k, v[0]) for k, v in _dict.items()])
111109
except Exception:
@@ -125,11 +123,11 @@ def unpack_either(self):
125123
_dict = self.unpack_post()
126124
else:
127125
_dict = None
128-
logger.debug("_dict: %s" % _dict)
126+
logger.debug("_dict: %s", _dict)
129127
return _dict
130128

131129
def operation(self, saml_msg, binding):
132-
logger.debug("_operation: %s" % saml_msg)
130+
logger.debug("_operation: %s", saml_msg)
133131
if not (saml_msg and 'SAMLRequest' in saml_msg):
134132
resp = BadRequest('Error parsing request or no request')
135133
return resp(self.environ, self.start_response)
@@ -211,7 +209,7 @@ def soap(self):
211209
"""
212210
logger.debug("- SOAP -")
213211
_dict = self.unpack_soap()
214-
logger.debug("_dict: %s" % _dict)
212+
logger.debug("_dict: %s", _dict)
215213
return self.operation(_dict, BINDING_SOAP)
216214

217215
def uri(self):
@@ -274,19 +272,19 @@ def verify_request(self, query, binding):
274272

275273
logger.info("parsed OK")
276274
_authn_req = self.req_info.message
277-
logger.debug("%s" % _authn_req)
275+
logger.debug("%s", _authn_req)
278276

279277
try:
280278
self.binding_out, self.destination = IDP.pick_binding(
281279
"assertion_consumer_service",
282280
bindings=self.response_bindings,
283281
entity_id=_authn_req.issuer.text, request=_authn_req)
284282
except Exception as err:
285-
logger.error("Couldn't find receiver endpoint: %s" % err)
283+
logger.error("Couldn't find receiver endpoint: %s", err)
286284
raise
287285

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)
290288

291289
resp_args = {}
292290
try:
@@ -314,18 +312,18 @@ def do(self, query, binding_in, relay_state="", encrypt_cert=None,
314312
try:
315313
resp_args, _resp = self.verify_request(query, binding_in)
316314
except UnknownPrincipal as excp:
317-
logger.error("UnknownPrincipal: %s" % (excp,))
315+
logger.error("UnknownPrincipal: %s", excp)
318316
resp = ServiceError("UnknownPrincipal: %s" % (excp,))
319317
return resp(self.environ, self.start_response)
320318
except UnsupportedBinding as excp:
321-
logger.error("UnsupportedBinding: %s" % (excp,))
319+
logger.error("UnsupportedBinding: %s", excp)
322320
resp = ServiceError("UnsupportedBinding: %s" % (excp,))
323321
return resp(self.environ, self.start_response)
324322

325323
if not _resp:
326324
identity = USERS[self.user].copy()
327325
# identity["eduPersonTargetedID"] = get_eptid(IDP, query, session)
328-
logger.info("Identity: %s" % (identity,))
326+
logger.info("Identity: %s", identity)
329327

330328
if REPOZE_ID_EQUIVALENT:
331329
identity[REPOZE_ID_EQUIVALENT] = self.user
@@ -346,7 +344,7 @@ def do(self, query, binding_in, relay_state="", encrypt_cert=None,
346344
resp = ServiceError("Exception: %s" % (excp,))
347345
return resp(self.environ, self.start_response)
348346

349-
logger.info("AuthNResponse: %s" % _resp)
347+
logger.info("AuthNResponse: %s", _resp)
350348
if self.op_type == "ecp":
351349
kwargs = {"soap_headers": [
352350
ecp.Response(
@@ -358,12 +356,12 @@ def do(self, query, binding_in, relay_state="", encrypt_cert=None,
358356
"%s" % _resp, self.destination,
359357
relay_state, response=True, **kwargs)
360358

361-
logger.debug("HTTPargs: %s" % http_args)
359+
logger.debug("HTTPargs: %s", http_args)
362360
return self.response(self.binding_out, http_args)
363361

364362
@staticmethod
365363
def _store_request(saml_msg):
366-
logger.debug("_store_request: %s" % saml_msg)
364+
logger.debug("_store_request: %s", saml_msg)
367365
key = sha1(saml_msg["SAMLRequest"]).hexdigest()
368366
# store the AuthnRequest
369367
IDP.ticket[key] = saml_msg
@@ -509,7 +507,7 @@ def do_authentication(environ, start_response, authn_context, key,
509507

510508
if len(auth_info):
511509
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)
513511
return method(environ, start_response, reference, key, redirect_uri, headers)
514512
else:
515513
resp = Unauthorized("No usable authentication method")
@@ -547,7 +545,7 @@ def username_password_authn(environ, start_response, reference, key,
547545
"authn_reference": reference,
548546
"redirect_uri": redirect_uri
549547
}
550-
logger.info("do_authentication argv: %s" % argv)
548+
logger.info("do_authentication argv: %s", argv)
551549
return resp(environ, start_response, **argv)
552550

553551

@@ -563,7 +561,7 @@ def verify_username_and_password(dic):
563561
def do_verify(environ, start_response, _):
564562
query = parse_qs(get_post(environ))
565563

566-
logger.debug("do_verify: %s" % query)
564+
logger.debug("do_verify: %s", query)
567565

568566
try:
569567
_ok, user = verify_username_and_password(query)
@@ -577,13 +575,13 @@ def do_verify(environ, start_response, _):
577575
uid = rndstr(24)
578576
IDP.cache.uid2user[uid] = user
579577
IDP.cache.user2uid[user] = uid
580-
logger.debug("Register %s under '%s'" % (user, uid))
578+
logger.debug("Register %s under '%s'", user, uid)
581579

582580
kaka = set_cookie("idpauthn", "/", uid, query["authn_reference"][0])
583581

584582
lox = "%s?id=%s&key=%s" % (query["redirect_uri"][0], uid,
585583
query["key"][0])
586-
logger.debug("Redirect => %s" % lox)
584+
logger.debug("Redirect => %s", lox)
587585
resp = Redirect(lox, headers=[kaka], content="text/html")
588586

589587
return resp(environ, start_response)
@@ -611,17 +609,17 @@ def do(self, request, binding, relay_state="", encrypt_cert=None, **kwargs):
611609

612610
logger.info("--- Single Log Out Service ---")
613611
try:
614-
logger.debug("req: '%s'" % request)
612+
logger.debug("req: '%s'", request)
615613
req_info = IDP.parse_logout_request(request, binding)
616614
except Exception as exc:
617-
logger.error("Bad request: %s" % exc)
615+
logger.error("Bad request: %s", exc)
618616
resp = BadRequest("%s" % exc)
619617
return resp(self.environ, self.start_response)
620618

621619
msg = req_info.message
622620
if msg.name_id:
623621
lid = IDP.ident.find_local_id(msg.name_id)
624-
logger.info("local identifier: %s" % lid)
622+
logger.info("local identifier: %s", lid)
625623
if lid in IDP.cache.user2uid:
626624
uid = IDP.cache.user2uid[lid]
627625
if uid in IDP.cache.uid2user:
@@ -631,8 +629,8 @@ def do(self, request, binding, relay_state="", encrypt_cert=None, **kwargs):
631629
try:
632630
IDP.session_db.remove_authn_statements(msg.name_id)
633631
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)
636634
return resp(self.environ, self.start_response)
637635

638636
resp = IDP.create_logout_response(msg, [binding])
@@ -650,15 +648,15 @@ def do(self, request, binding, relay_state="", encrypt_cert=None, **kwargs):
650648
hinfo = IDP.apply_binding(binding, "%s" % resp, destination,
651649
relay_state, response=response)
652650
except Exception as exc:
653-
logger.error("ServiceError: %s" % exc)
651+
logger.error("ServiceError: %s", exc)
654652
resp = ServiceError("%s" % exc)
655653
return resp(self.environ, self.start_response)
656654

657655
#_tlh = dict2list_of_tuples(hinfo["headers"])
658656
delco = delete_cookie(self.environ, "idpauthn")
659657
if delco:
660658
hinfo["headers"].append(delco)
661-
logger.info("Header: %s" % (hinfo["headers"],))
659+
logger.info("Header: %s", (hinfo["headers"],))
662660

663661
if binding == BINDING_HTTP_REDIRECT:
664662
for key, value in hinfo['headers']:
@@ -689,7 +687,7 @@ def do(self, query, binding, relay_state="", encrypt_cert=None):
689687
request.name_id, request.new_id, request.new_encrypted_id,
690688
request.terminate)
691689

692-
logger.debug("New NameID: %s" % name_id)
690+
logger.debug("New NameID: %s", name_id)
693691

694692
_resp = IDP.create_manage_name_id_response(request)
695693

@@ -719,12 +717,12 @@ def do(self, aid, binding, relay_state="", encrypt_cert=None):
719717

720718
hinfo = IDP.apply_binding(BINDING_URI, "%s" % assertion, response=True)
721719

722-
logger.debug("HINFO: %s" % hinfo)
720+
logger.debug("HINFO: %s", hinfo)
723721
resp = Response(hinfo["data"], headers=hinfo["headers"])
724722
return resp(self.environ, self.start_response)
725723

726724
def operation(self, _dict, binding, **kwargs):
727-
logger.debug("_operation: %s" % _dict)
725+
logger.debug("_operation: %s", _dict)
728726
if not _dict or "ID" not in _dict:
729727
resp = BadRequest('Error parsing request or no request')
730728
return resp(self.environ, self.start_response)
@@ -765,7 +763,7 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
765763
_query.requested_authn_context,
766764
_query.session_index)
767765

768-
logger.debug("response: %s" % msg)
766+
logger.debug("response: %s", msg)
769767
hinfo = IDP.apply_binding(BINDING_SOAP, "%s" % msg, "", "",
770768
response=True)
771769

@@ -788,15 +786,15 @@ def do(self, request, binding, relay_state="", encrypt_cert=None):
788786

789787
name_id = _query.subject.name_id
790788
uid = name_id.text
791-
logger.debug("Local uid: %s" % uid)
789+
logger.debug("Local uid: %s", uid)
792790
identity = EXTRA[uid]
793791

794792
# Comes in over SOAP so only need to construct the response
795793
args = IDP.response_args(_query, [BINDING_SOAP])
796794
msg = IDP.create_attribute_response(identity,
797795
name_id=name_id, **args)
798796

799-
logger.debug("response: %s" % msg)
797+
logger.debug("response: %s", msg)
800798
hinfo = IDP.apply_binding(BINDING_SOAP, "%s" % msg, "", "",
801799
response=True)
802800

@@ -843,7 +841,7 @@ def do(self, query, binding, relay_state="", encrypt_cert=None):
843841
# Cookie handling
844842
# ----------------------------------------------------------------------------
845843
def info_from_cookie(kaka):
846-
logger.debug("KAKA: %s" % kaka)
844+
logger.debug("KAKA: %s", kaka)
847845
if kaka:
848846
cookie_obj = SimpleCookie(kaka)
849847
morsel = cookie_obj.get("idpauthn", None)
@@ -860,14 +858,14 @@ def info_from_cookie(kaka):
860858

861859
def delete_cookie(environ, name):
862860
kaka = environ.get("HTTP_COOKIE", '')
863-
logger.debug("delete KAKA: %s" % kaka)
861+
logger.debug("delete KAKA: %s", kaka)
864862
if kaka:
865863
cookie_obj = SimpleCookie(kaka)
866864
morsel = cookie_obj.get(name, None)
867865
cookie = SimpleCookie()
868866
cookie[name] = ""
869867
cookie[name]['path'] = "/"
870-
logger.debug("Expire: %s" % morsel)
868+
logger.debug("Expire: %s", morsel)
871869
cookie[name]["expires"] = _expiration("dawn")
872870
return tuple(cookie.output().split(": ", 1))
873871
return None
@@ -878,7 +876,7 @@ def set_cookie(name, _, *args):
878876
cookie[name] = base64.b64encode(":".join(args))
879877
cookie[name]['path'] = "/"
880878
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"])
882880
return tuple(cookie.output().split(": ", 1))
883881

884882
# ----------------------------------------------------------------------------
@@ -941,7 +939,7 @@ def metadata(environ, start_response):
941939
start_response('200 OK', [('Content-Type', "text/xml")])
942940
return metadata
943941
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)
945943
return not_found(environ, start_response)
946944

947945

@@ -960,7 +958,7 @@ def staticfile(environ, start_response):
960958
start_response('200 OK', [('Content-Type', "text/xml")])
961959
return open(path, 'r').read()
962960
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)
964962
return not_found(environ, start_response)
965963

966964

@@ -972,9 +970,9 @@ def application(environ, start_response):
972970
the functions from above can access the url placeholders.
973971
974972
If nothing matches, call the `not_found` function.
975-
973+
976974
: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
978976
request is done
979977
:return: The response as a list of lines
980978
"""
@@ -985,7 +983,7 @@ def application(environ, start_response):
985983
return metadata(environ, start_response)
986984

987985
kaka = environ.get("HTTP_COOKIE", None)
988-
logger.info("<application> PATH: %s" % path)
986+
logger.info("<application> PATH: %s", path)
989987

990988
if kaka:
991989
logger.info("= KAKA =")
@@ -995,7 +993,7 @@ def application(environ, start_response):
995993
else:
996994
try:
997995
query = parse_qs(environ["QUERY_STRING"])
998-
logger.debug("QUERY: %s" % query)
996+
logger.debug("QUERY: %s", query)
999997
user = IDP.cache.uid2user[query["id"][0]]
1000998
except KeyError:
1001999
user = None
@@ -1014,7 +1012,7 @@ def application(environ, start_response):
10141012
except IndexError:
10151013
environ['myapp.url_args'] = path
10161014

1017-
logger.debug("Callback: %s" % (callback,))
1015+
logger.debug("Callback: %s", callback)
10181016
if isinstance(callback, tuple):
10191017
cls = callback[0](environ, start_response, user)
10201018
func = getattr(cls, callback[1])
@@ -1085,7 +1083,8 @@ def application(environ, start_response):
10851083
_https = ""
10861084
if CONFIG.HTTPS:
10871085
SRV.ssl_adapter = ssl_pyopenssl.pyOpenSSLAdapter(CONFIG.SERVER_CERT,
1088-
CONFIG.SERVER_KEY, CONFIG.CERT_CHAIN)
1086+
CONFIG.SERVER_KEY,
1087+
CONFIG.CERT_CHAIN)
10891088
_https = " using SSL/TLS"
10901089
logger.info("Server starting")
10911090
print("IDP listening on %s:%s%s" % (HOST, PORT, _https))

0 commit comments

Comments
 (0)