summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kanakarakis <ivan.kanak@gmail.com>2021-12-07 15:43:32 +0200
committerIvan Kanakarakis <ivan.kanak@gmail.com>2021-12-07 15:53:16 +0200
commitb32fe902b47803fb4a701ed7830d9e7b03fde3fc (patch)
tree8c72163476ec5292be8d26b2353d77765194ba2b
parent79ae7112547e6b386fe27f5fc57e02b4220d6872 (diff)
downloadpysaml2-b32fe902b47803fb4a701ed7830d9e7b03fde3fc.tar.gz
Attribute values are optional
Signed-off-by: Ivan Kanakarakis <ivan.kanak@gmail.com>
-rw-r--r--src/saml2/assertion.py7
-rw-r--r--src/saml2/mdstore.py14
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):