summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kanakarakis <ivan.kanak@gmail.com>2020-11-04 22:36:07 +0200
committerGitHub <noreply@github.com>2020-11-04 22:36:07 +0200
commit055ff7b3c722364a3d57ad63df4b19247e6287ca (patch)
treefd08be9eccd430761229125c26984e7054e3fabd
parent239c7a93d649a9dea171102406014a7d5113cf95 (diff)
parent17ba9b1894824451957305d6348e3dc6bcb0402f (diff)
downloadpysaml2-055ff7b3c722364a3d57ad63df4b19247e6287ca.tar.gz
Merge pull request #742 from johanlundberg/bugfix_registration_policy_none
Handle registration_policy None
-rw-r--r--src/saml2/mdstore.py35
-rw-r--r--tests/test_30_mdstore.py10
2 files changed, 31 insertions, 14 deletions
diff --git a/src/saml2/mdstore.py b/src/saml2/mdstore.py
index 76a981a8..96acfa1e 100644
--- a/src/saml2/mdstore.py
+++ b/src/saml2/mdstore.py
@@ -1432,22 +1432,29 @@ class MetadataStore(MetaData):
:type entity_id: string
:rtype: dict
"""
- res = {
- 'registration_authority': None,
- 'registration_instant': None,
- 'registration_policy': {}
- }
try:
- ext = self.__getitem__(entity_id)["extensions"]
+ ext = self.__getitem__(entity_id)
except KeyError:
- return res
- for elem in ext["extension_elements"]:
- if elem["__class__"] == classnames["mdrpi_registration_info"]:
- res["registration_authority"] = elem["registration_authority"]
- res["registration_instant"] = elem.get("registration_instant")
- for policy in elem.get('registration_policy'):
- if policy["__class__"] == classnames["mdrpi_registration_policy"]:
- res['registration_policy'][policy["lang"]] = policy["text"]
+ ext = {}
+
+ ext_elems = ext.get("extensions", {}).get("extension_elements", [])
+ reg_info = next(
+ (
+ elem
+ for elem in ext_elems
+ if elem["__class__"] == classnames["mdrpi_registration_info"]
+ ),
+ {},
+ )
+ res = {
+ "registration_authority": reg_info.get("registration_authority"),
+ "registration_instant": reg_info.get("registration_instant"),
+ "registration_policy": {
+ policy["lang"]: policy["text"]
+ for policy in reg_info.get("registration_policy", [])
+ if policy["__class__"] == classnames["mdrpi_registration_policy"]
+ },
+ }
return res
def _lookup_elements_by_cls(self, root, cls):
diff --git a/tests/test_30_mdstore.py b/tests/test_30_mdstore.py
index fede1010..4dfa80f3 100644
--- a/tests/test_30_mdstore.py
+++ b/tests/test_30_mdstore.py
@@ -575,6 +575,16 @@ def test_registration_info():
registration_info['registration_policy']['en']
+def test_registration_info_no_policy():
+ mds = MetadataStore(ATTRCONV, sec_config,
+ disable_ssl_certificate_validation=True)
+ mds.imp(METADATACONF["13"])
+ registration_info = mds.registration_info(entity_id='https://idp.szie.hu/idp/shibboleth')
+ assert 'http://eduid.hu' == registration_info['registration_authority']
+ assert registration_info['registration_instant'] is None
+ assert registration_info['registration_policy'] == {}
+
+
def test_extension():
mds = MetadataStore(ATTRCONV, None)
# use ordered dict to force expected entity to be last