From c24b47cebacb89191c1cea29e1dd21964398e91d Mon Sep 17 00:00:00 2001 From: Ioannis Kakavas Date: Mon, 12 Jun 2017 16:57:28 +0300 Subject: [PATCH] Base attribute filtering on internal representation names Instead on relying on the FriendlyName from metadatata, use the name of the internal representation of an attribute in order to perform filtering. Resolves #422 --- src/saml2/assertion.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/saml2/assertion.py b/src/saml2/assertion.py index 64944d1..a9e3372 100644 --- a/src/saml2/assertion.py +++ b/src/saml2/assertion.py @@ -79,10 +79,15 @@ def filter_on_attributes(ava, required=None, optional=None, acs=None, def _match_attr_name(attr, ava): try: - friendly_name = attr["friendly_name"] - except KeyError: - friendly_name = get_local_name(acs, attr["name"], + friendly_name = get_local_name(acs, attr["name"], attr["name_format"]) + except: + friendly_name = None + if not friendly_name: + try: + friendly_name = attr["friendly_name"] + except KeyError: + pass _fn = _match(friendly_name, ava) if not _fn: # In the unlikely case that someone has provided us with @@ -91,6 +96,7 @@ def filter_on_attributes(ava, required=None, optional=None, acs=None, return _fn + def _apply_attr_value_restrictions(attr, res, must=False): try: values = [av["text"] for av in attr["attribute_value"]] @@ -105,7 +111,6 @@ def filter_on_attributes(ava, required=None, optional=None, acs=None, return _filter_values(ava[_fn], values, must) res = {} - if required is None: required = []