Skip to content

Commit 6c1b963

Browse files
author
Roland Hedberg
committed
Added a needed method on the MetaData class level.
1 parent 15358e7 commit 6c1b963

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

src/saml2/mdstore.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,45 @@ def __eq__(self, other):
391391

392392
return True
393393

394+
def certs(self, entity_id, descriptor, use="signing"):
395+
ent = self.__getitem__(entity_id)
396+
if descriptor == "any":
397+
res = []
398+
for descr in ["spsso", "idpsso", "role", "authn_authority",
399+
"attribute_authority", "pdp"]:
400+
try:
401+
srvs = ent["%s_descriptor" % descr]
402+
except KeyError:
403+
continue
404+
405+
for srv in srvs:
406+
for key in srv["key_descriptor"]:
407+
if "use" in key and key["use"] == use:
408+
for dat in key["key_info"]["x509_data"]:
409+
cert = repack_cert(
410+
dat["x509_certificate"]["text"])
411+
if cert not in res:
412+
res.append(cert)
413+
elif not "use" in key:
414+
for dat in key["key_info"]["x509_data"]:
415+
cert = repack_cert(
416+
dat["x509_certificate"]["text"])
417+
if cert not in res:
418+
res.append(cert)
419+
else:
420+
srvs = ent["%s_descriptor" % descriptor]
421+
422+
res = []
423+
for srv in srvs:
424+
for key in srv["key_descriptor"]:
425+
if "use" in key and key["use"] == use:
426+
for dat in key["key_info"]["x509_data"]:
427+
res.append(dat["x509_certificate"]["text"])
428+
elif not "use" in key:
429+
for dat in key["key_info"]["x509_data"]:
430+
res.append(dat["x509_certificate"]["text"])
431+
return res
432+
394433

395434
class MetaDataFile(MetaData):
396435
"""
@@ -557,6 +596,7 @@ def __getitem__(self, item):
557596
md.EntitiesDescriptor.c_tag)
558597

559598
_txt = response.text.encode("utf-8")
599+
560600
if self.cert:
561601
if self.security.verify_signature(_txt,
562602
node_name=node_name,
@@ -571,6 +611,7 @@ def __getitem__(self, item):
571611
raise KeyError
572612

573613

614+
574615
class MetadataStore(object):
575616
def __init__(self, onts, attrc, config, ca_certs=None,
576617
check_validity=True,

tests/test_30_mdstore.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ def test_metadata_file():
226226
assert len(mds.keys()) == 560
227227

228228

229-
def test_mdx():
229+
def test_mdx_service():
230230
sec_config.xmlsec_binary = sigver.get_xmlsec_binary(["/opt/local/bin"])
231231
http = HTTPBase(verify=False, ca_bundle=None)
232232

@@ -238,5 +238,16 @@ def test_mdx():
238238
assert len(foo) == 1
239239
assert foo.keys()[0] == BINDING_HTTP_REDIRECT
240240

241+
242+
def test_mdx_certs():
243+
sec_config.xmlsec_binary = sigver.get_xmlsec_binary(["/opt/local/bin"])
244+
http = HTTPBase(verify=False, ca_bundle=None)
245+
246+
mdx = MetaDataMDX(ONTS.values(), ATTRCONV, "http://pyff-test.nordu.net",
247+
sec_config, None, http)
248+
foo = mdx.certs("https://idp.umu.se/saml2/idp/metadata.php", "idpsso")
249+
250+
assert len(foo) == 1
251+
241252
if __name__ == "__main__":
242-
test_mdx()
253+
test_mdx_certs()

0 commit comments

Comments
 (0)