From b32fe902b47803fb4a701ed7830d9e7b03fde3fc Mon Sep 17 00:00:00 2001 From: Ivan Kanakarakis Date: Tue, 7 Dec 2021 15:43:32 +0200 Subject: Attribute values are optional Signed-off-by: Ivan Kanakarakis --- src/saml2/assertion.py | 7 +++---- src/saml2/mdstore.py | 14 ++++++++------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/saml2/assertion.py b/src/saml2/assertion.py index 4474bf42..99308ecc 100644 --- a/src/saml2/assertion.py +++ b/src/saml2/assertion.py @@ -110,10 +110,9 @@ def filter_on_attributes(ava, required=None, optional=None, acs=None, def _apply_attr_value_restrictions(attr, res, must=False): - try: - values = [av["text"] for av in attr["attribute_value"]] - except KeyError: - values = [] + values = [ + av["text"] for av in attr.get("attribute_value", []) + ] try: res[_fn].extend(_filter_values(ava[_fn], values)) diff --git a/src/saml2/mdstore.py b/src/saml2/mdstore.py index 40f7232e..105d8509 100644 --- a/src/saml2/mdstore.py +++ b/src/saml2/mdstore.py @@ -1379,13 +1379,15 @@ class MetadataStore(MetaData): ext = self.__getitem__(entity_id)["extensions"] except KeyError: return res + for elem in ext["extension_elements"]: - if elem["__class__"] == classnames["mdattr_entityattributes"]: - for attr in elem["attribute"]: - if attr["name"] not in res: - res[attr["name"]] = [] - res[attr["name"]] += [v["text"] for v in attr[ - "attribute_value"]] + if elem["__class__"] != classnames["mdattr_entityattributes"]: + continue + for attr in elem["attribute"]: + res[attr["name"]] = [ + *res.get(attr["name"], []), + *(v["text"] for v in attr.get("attribute_value", [])) + ] return res def supported_algorithms(self, entity_id): -- cgit v1.2.1