Skip to content

Commit 055ff7b

Browse files
Merge pull request #742 from johanlundberg/bugfix_registration_policy_none
Handle registration_policy None
2 parents 239c7a9 + 17ba9b1 commit 055ff7b

File tree

2 files changed

+31
-14
lines changed

2 files changed

+31
-14
lines changed

Diff for: src/saml2/mdstore.py

+21-14
Original file line numberDiff line numberDiff line change
@@ -1432,22 +1432,29 @@ def registration_info(self, entity_id):
14321432
:type entity_id: string
14331433
:rtype: dict
14341434
"""
1435-
res = {
1436-
'registration_authority': None,
1437-
'registration_instant': None,
1438-
'registration_policy': {}
1439-
}
14401435
try:
1441-
ext = self.__getitem__(entity_id)["extensions"]
1436+
ext = self.__getitem__(entity_id)
14421437
except KeyError:
1443-
return res
1444-
for elem in ext["extension_elements"]:
1445-
if elem["__class__"] == classnames["mdrpi_registration_info"]:
1446-
res["registration_authority"] = elem["registration_authority"]
1447-
res["registration_instant"] = elem.get("registration_instant")
1448-
for policy in elem.get('registration_policy'):
1449-
if policy["__class__"] == classnames["mdrpi_registration_policy"]:
1450-
res['registration_policy'][policy["lang"]] = policy["text"]
1438+
ext = {}
1439+
1440+
ext_elems = ext.get("extensions", {}).get("extension_elements", [])
1441+
reg_info = next(
1442+
(
1443+
elem
1444+
for elem in ext_elems
1445+
if elem["__class__"] == classnames["mdrpi_registration_info"]
1446+
),
1447+
{},
1448+
)
1449+
res = {
1450+
"registration_authority": reg_info.get("registration_authority"),
1451+
"registration_instant": reg_info.get("registration_instant"),
1452+
"registration_policy": {
1453+
policy["lang"]: policy["text"]
1454+
for policy in reg_info.get("registration_policy", [])
1455+
if policy["__class__"] == classnames["mdrpi_registration_policy"]
1456+
},
1457+
}
14511458
return res
14521459

14531460
def _lookup_elements_by_cls(self, root, cls):

Diff for: tests/test_30_mdstore.py

+10
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,16 @@ def test_registration_info():
575575
registration_info['registration_policy']['en']
576576

577577

578+
def test_registration_info_no_policy():
579+
mds = MetadataStore(ATTRCONV, sec_config,
580+
disable_ssl_certificate_validation=True)
581+
mds.imp(METADATACONF["13"])
582+
registration_info = mds.registration_info(entity_id='https://idp.szie.hu/idp/shibboleth')
583+
assert 'http://eduid.hu' == registration_info['registration_authority']
584+
assert registration_info['registration_instant'] is None
585+
assert registration_info['registration_policy'] == {}
586+
587+
578588
def test_extension():
579589
mds = MetadataStore(ATTRCONV, None)
580590
# use ordered dict to force expected entity to be last

0 commit comments

Comments
 (0)