From 1432950d86c1941da0b6465804b94a3ca75075f8 Mon Sep 17 00:00:00 2001 From: Ivan Kanakarakis Date: Mon, 17 Jun 2019 01:27:56 +0300 Subject: Restructure to_eptid_value function Use "text" instead of "value" as the key that denotes the text-value of the NameID node. Signed-off-by: Ivan Kanakarakis --- src/saml2/attribute_converter.py | 58 +++++++++++++++++++----------------- tests/test_19_attribute_converter.py | 23 ++++++++------ 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/src/saml2/attribute_converter.py b/src/saml2/attribute_converter.py index cd40fe79..bc937702 100644 --- a/src/saml2/attribute_converter.py +++ b/src/saml2/attribute_converter.py @@ -447,39 +447,41 @@ class AttributeConverter(object): return attributes - def to_eptid_value(self, value): + def to_eptid_value(self, values): """ - Special handling for the attribute with name - urn:oid:1.3.6.1.4.1.5923.1.1.1.10, usually known by the friendly - name eduPersonTargetedID. Create the AttributeValue instance(s) - for the attribute. + Create AttributeValue instances of NameID from the given values. - value is either a string or a dictionary with keys 'value', - 'NameQualifier', and 'SPNameQualifier'. + Special handling for the "eptid" attribute + Name=urn:oid:1.3.6.1.4.1.5923.1.1.1.10 + FriendlyName=eduPersonTargetedID - Returns a list of AttributeValue instances. - """ - attribute_values = [] - - for v in value: - if isinstance(v, dict): - element_attributes = { - 'Format': NAMEID_FORMAT_PERSISTENT, - 'NameQualifier': v['NameQualifier'], - 'SPNameQualifier': v['SPNameQualifier'] - } - text = v['value'] - else: - element_attributes = {'Format': NAMEID_FORMAT_PERSISTENT} - text = v - - element = ExtensionElement("NameID", NAMESPACE, element_attributes, - text=text) + values is a list of items of type str or dict. When an item is a + dictionary it has the keys: "NameQualifier", "SPNameQualifier", and + "text". - attrval = saml.AttributeValue(extension_elements=[element]) - - attribute_values.append(attrval) + Returns a list of AttributeValue instances of NameID elements. + """ + def _create_nameid_ext_el(value): + text = value["text"] if isinstance(value, dict) else value + attributes = ( + { + "Format": NAMEID_FORMAT_PERSISTENT, + "NameQualifier": value["NameQualifier"], + "SPNameQualifier": value["SPNameQualifier"], + } + if isinstance(value, dict) + else {"Format": NAMEID_FORMAT_PERSISTENT} + ) + element = ExtensionElement( + "NameID", NAMESPACE, attributes=attributes, text=text + ) + return element + + attribute_values = [ + saml.AttributeValue(extension_elements=[_create_nameid_ext_el(v)]) + for v in values + ] return attribute_values diff --git a/tests/test_19_attribute_converter.py b/tests/test_19_attribute_converter.py index 99eef12a..fdb9cd96 100644 --- a/tests/test_19_attribute_converter.py +++ b/tests/test_19_attribute_converter.py @@ -222,13 +222,18 @@ class TestAC(): assert attributes[0].attribute_value[1].extension_elements[0].text == "test value2" def test_from_local_eduPersonTargetedID_with_qualifiers(self): - IDP_ENTITY_ID = 'https://some.org/idp' - SP_ENTITY_ID = 'https://some.org/sp' - - ava = {"edupersontargetedid": [{ - 'value': "test value1", - 'NameQualifier': IDP_ENTITY_ID, - 'SPNameQualifier': SP_ENTITY_ID}]} + IDP_ENTITY_ID = "https://some.org/idp" + SP_ENTITY_ID = "https://some.org/sp" + + ava = { + "edupersontargetedid": [ + { + "text": "test value1", + "NameQualifier": IDP_ENTITY_ID, + "SPNameQualifier": SP_ENTITY_ID, + } + ] + } attributes = from_local(self.acs, ava, URI_NF) assert len(attributes) == 1 @@ -236,8 +241,8 @@ class TestAC(): element = attributes[0].attribute_value[0].extension_elements[0] assert element.text == "test value1" - assert element.attributes['NameQualifier'] == IDP_ENTITY_ID - assert element.attributes['SPNameQualifier'] == SP_ENTITY_ID + assert element.attributes["NameQualifier"] == IDP_ENTITY_ID + assert element.attributes["SPNameQualifier"] == SP_ENTITY_ID def test_noop_attribute_conversion(): -- cgit v1.2.1