Skip to content

Commit 326705d

Browse files
johanlundbergc00kiemon5ter
authored andcommitted
Support registration info in mdstore
1 parent 3da528c commit 326705d

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

src/saml2/mdstore.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@
5656
from saml2.extension.mdui import InformationURL
5757
from saml2.extension.mdui import PrivacyStatementURL
5858
from saml2.extension.mdui import Logo
59+
from saml2.extension.mdrpi import NAMESPACE as NS_MDRPI
60+
from saml2.extension.mdrpi import RegistrationInfo
61+
from saml2.extension.mdrpi import RegistrationPolicy
5962

6063

6164
logger = logging.getLogger(__name__)
@@ -79,6 +82,8 @@
7982
"service_artifact_resolution": "{ns}&{tag}".format(ns=NS_MD, tag=ArtifactResolutionService.c_tag),
8083
"service_single_sign_on": "{ns}&{tag}".format(ns=NS_MD, tag=SingleSignOnService.c_tag),
8184
"service_nameid_mapping": "{ns}&{tag}".format(ns=NS_MD, tag=NameIDMappingService.c_tag),
85+
"mdrpi_registration_info": "{ns}&{tag}".format(ns=NS_MDRPI, tag=RegistrationInfo.c_tag),
86+
"mdrpi_registration_policy": "{ns}&{tag}".format(ns=NS_MDRPI, tag=RegistrationPolicy.c_tag),
8287
}
8388

8489
ENTITY_CATEGORY = "http://macedir.org/entity-category"
@@ -1406,6 +1411,45 @@ def supported_algorithms(self, entity_id):
14061411
res['signing_methods'].append(elem['algorithm'])
14071412
return res
14081413

1414+
def registration_info(self, entity_id):
1415+
"""
1416+
Get all registration info for an entry in the metadata.
1417+
1418+
Example return data:
1419+
1420+
res = {
1421+
'registration_authority': 'http://www.example.com',
1422+
'registration_instant': '2013-06-15T18:15:03Z',
1423+
'registration_policy': {
1424+
'en': 'http://www.example.com/policy.html',
1425+
'sv': 'http://www.example.com/sv/policy.html',
1426+
}
1427+
}
1428+
1429+
:param entity_id: Entity id
1430+
:return: dict with keys and value-lists from metadata
1431+
1432+
:type entity_id: string
1433+
:rtype: dict
1434+
"""
1435+
res = {
1436+
'registration_authority': None,
1437+
'registration_instant': None,
1438+
'registration_policy': {}
1439+
}
1440+
try:
1441+
ext = self.__getitem__(entity_id)["extensions"]
1442+
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"]
1451+
return res
1452+
14091453
def _lookup_elements_by_cls(self, root, cls):
14101454
elements = (
14111455
element

tests/test_30_mdstore.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@
152152
"class": "saml2.mdstore.MetaDataFile",
153153
"metadata": [(full_path("uu.xml"),)],
154154
}],
155+
"13": [{
156+
"class": "saml2.mdstore.MetaDataFile",
157+
"metadata": [(full_path("swamid-2.0.xml"),)],
158+
}],
155159
}
156160

157161

@@ -560,6 +564,17 @@ def test_supported_algorithms():
560564
assert 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256' in algs['signing_methods']
561565

562566

567+
def test_registration_info():
568+
mds = MetadataStore(ATTRCONV, sec_config,
569+
disable_ssl_certificate_validation=True)
570+
mds.imp(METADATACONF["13"])
571+
registration_info = mds.registration_info(entity_id='https://aai-idp.unibe.ch/idp/shibboleth')
572+
assert 'http://rr.aai.switch.ch/' == registration_info['registration_authority']
573+
assert '2013-06-15T18:15:03Z' == registration_info['registration_instant']
574+
assert 'https://www.switch.ch/aai/federation/switchaai/metadata-registration-practice-statement-20110711.txt' == \
575+
registration_info['registration_policy']['en']
576+
577+
563578
def test_extension():
564579
mds = MetadataStore(ATTRCONV, None)
565580
# use ordered dict to force expected entity to be last

0 commit comments

Comments
 (0)