Skip to content

Commit 1432950

Browse files
committed
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 <[email protected]>
1 parent 634644e commit 1432950

File tree

2 files changed

+44
-37
lines changed

2 files changed

+44
-37
lines changed

src/saml2/attribute_converter.py

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -447,39 +447,41 @@ def to_(self, attrvals):
447447

448448
return attributes
449449

450-
def to_eptid_value(self, value):
450+
def to_eptid_value(self, values):
451451
"""
452-
Special handling for the attribute with name
453-
urn:oid:1.3.6.1.4.1.5923.1.1.1.10, usually known by the friendly
454-
name eduPersonTargetedID. Create the AttributeValue instance(s)
455-
for the attribute.
452+
Create AttributeValue instances of NameID from the given values.
456453
457-
value is either a string or a dictionary with keys 'value',
458-
'NameQualifier', and 'SPNameQualifier'.
454+
Special handling for the "eptid" attribute
455+
Name=urn:oid:1.3.6.1.4.1.5923.1.1.1.10
456+
FriendlyName=eduPersonTargetedID
459457
460-
Returns a list of AttributeValue instances.
461-
"""
462-
attribute_values = []
463-
464-
for v in value:
465-
if isinstance(v, dict):
466-
element_attributes = {
467-
'Format': NAMEID_FORMAT_PERSISTENT,
468-
'NameQualifier': v['NameQualifier'],
469-
'SPNameQualifier': v['SPNameQualifier']
470-
}
471-
text = v['value']
472-
else:
473-
element_attributes = {'Format': NAMEID_FORMAT_PERSISTENT}
474-
text = v
475-
476-
element = ExtensionElement("NameID", NAMESPACE, element_attributes,
477-
text=text)
458+
values is a list of items of type str or dict. When an item is a
459+
dictionary it has the keys: "NameQualifier", "SPNameQualifier", and
460+
"text".
478461
479-
attrval = saml.AttributeValue(extension_elements=[element])
480-
481-
attribute_values.append(attrval)
462+
Returns a list of AttributeValue instances of NameID elements.
463+
"""
482464

465+
def _create_nameid_ext_el(value):
466+
text = value["text"] if isinstance(value, dict) else value
467+
attributes = (
468+
{
469+
"Format": NAMEID_FORMAT_PERSISTENT,
470+
"NameQualifier": value["NameQualifier"],
471+
"SPNameQualifier": value["SPNameQualifier"],
472+
}
473+
if isinstance(value, dict)
474+
else {"Format": NAMEID_FORMAT_PERSISTENT}
475+
)
476+
element = ExtensionElement(
477+
"NameID", NAMESPACE, attributes=attributes, text=text
478+
)
479+
return element
480+
481+
attribute_values = [
482+
saml.AttributeValue(extension_elements=[_create_nameid_ext_el(v)])
483+
for v in values
484+
]
483485
return attribute_values
484486

485487

tests/test_19_attribute_converter.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -222,22 +222,27 @@ def test_from_local_nest_eduPersonTargetedID_in_NameID(self):
222222
assert attributes[0].attribute_value[1].extension_elements[0].text == "test value2"
223223

224224
def test_from_local_eduPersonTargetedID_with_qualifiers(self):
225-
IDP_ENTITY_ID = 'https://some.org/idp'
226-
SP_ENTITY_ID = 'https://some.org/sp'
227-
228-
ava = {"edupersontargetedid": [{
229-
'value': "test value1",
230-
'NameQualifier': IDP_ENTITY_ID,
231-
'SPNameQualifier': SP_ENTITY_ID}]}
225+
IDP_ENTITY_ID = "https://some.org/idp"
226+
SP_ENTITY_ID = "https://some.org/sp"
227+
228+
ava = {
229+
"edupersontargetedid": [
230+
{
231+
"text": "test value1",
232+
"NameQualifier": IDP_ENTITY_ID,
233+
"SPNameQualifier": SP_ENTITY_ID,
234+
}
235+
]
236+
}
232237
attributes = from_local(self.acs, ava, URI_NF)
233238

234239
assert len(attributes) == 1
235240

236241
element = attributes[0].attribute_value[0].extension_elements[0]
237242

238243
assert element.text == "test value1"
239-
assert element.attributes['NameQualifier'] == IDP_ENTITY_ID
240-
assert element.attributes['SPNameQualifier'] == SP_ENTITY_ID
244+
assert element.attributes["NameQualifier"] == IDP_ENTITY_ID
245+
assert element.attributes["SPNameQualifier"] == SP_ENTITY_ID
241246

242247

243248
def test_noop_attribute_conversion():

0 commit comments

Comments
 (0)