@@ -90,6 +90,52 @@ class NoServiceDefined(SAMLError):
90
90
pass
91
91
92
92
93
+ def create_requested_attribute_node (requested_attrs , attribute_converters ):
94
+ items = []
95
+ for attr in requested_attrs :
96
+ friendly_name = attr .get ('friendly_name' )
97
+ name = attr .get ('name' )
98
+ name_format = attr .get ('name_format' )
99
+ is_required = str (attr .get ('required' , False )).lower ()
100
+
101
+ if not name and not friendly_name :
102
+ raise ValueError ("Missing required attribute: 'name' or 'friendly_name'" )
103
+
104
+ if not name :
105
+ for converter in attribute_converters :
106
+ try :
107
+ name = converter ._to [friendly_name .lower ()]
108
+ except KeyError :
109
+ continue
110
+ else :
111
+ if not name_format :
112
+ name_format = converter .name_format
113
+ break
114
+
115
+ if not friendly_name :
116
+ for converter in attribute_converters :
117
+ try :
118
+ friendly_name = converter ._fro [name .lower ()]
119
+ except KeyError :
120
+ continue
121
+ else :
122
+ if not name_format :
123
+ name_format = converter .name_format
124
+ break
125
+
126
+ items .append (
127
+ RequestedAttribute (
128
+ is_required = is_required ,
129
+ name_format = name_format ,
130
+ friendly_name = friendly_name ,
131
+ name = name ,
132
+ )
133
+ )
134
+
135
+ node = RequestedAttributes (extension_elements = items )
136
+ return node
137
+
138
+
93
139
class Base (Entity ):
94
140
""" The basic pySAML2 service provider class """
95
141
@@ -388,57 +434,13 @@ def create_authn_request(self, destination, vorg="", scoping=None,
388
434
or self .config .getattr ('requested_attributes' , 'sp' )
389
435
or []
390
436
)
391
-
392
- if not extensions :
393
- extensions = Extensions ()
394
-
395
- items = []
396
- for attr in requested_attrs :
397
- friendly_name = attr .get ('friendly_name' )
398
- name = attr .get ('name' )
399
- name_format = attr .get ('name_format' )
400
- is_required = str (attr .get ('required' , False )).lower ()
401
-
402
- if not name and not friendly_name :
403
- raise ValueError (
404
- "Missing required attribute: '{}' or '{}'" .format (
405
- 'name' , 'friendly_name'
406
- )
407
- )
408
-
409
- if not name :
410
- for converter in self .config .attribute_converters :
411
- try :
412
- name = converter ._to [friendly_name .lower ()]
413
- except KeyError :
414
- continue
415
- else :
416
- if not name_format :
417
- name_format = converter .name_format
418
- break
419
-
420
- if not friendly_name :
421
- for converter in self .config .attribute_converters :
422
- try :
423
- friendly_name = converter ._fro [name .lower ()]
424
- except KeyError :
425
- continue
426
- else :
427
- if not name_format :
428
- name_format = converter .name_format
429
- break
430
-
431
- items .append (
432
- RequestedAttribute (
433
- is_required = is_required ,
434
- name_format = name_format ,
435
- friendly_name = friendly_name ,
436
- name = name ,
437
- )
437
+ if requested_attrs :
438
+ req_attrs_node = create_requested_attribute_node (
439
+ requested_attrs , self .config .attribute_converters
438
440
)
439
-
440
- item = RequestedAttributes ( extension_elements = items )
441
- extensions .add_extension_element (item )
441
+ if not extensions :
442
+ extensions = Extensions ( )
443
+ extensions .add_extension_element (req_attrs_node )
442
444
443
445
force_authn = str (
444
446
kwargs .pop ("force_authn" , None )
0 commit comments