Skip to content

Commit d7f50d4

Browse files
author
Roland Hedberg
committed
Refactored the support for metadata extensions in the config file.
1 parent cbb0c8e commit d7f50d4

File tree

10 files changed

+435
-245
lines changed

10 files changed

+435
-245
lines changed

src/saml2/config.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@
6868
"generate_cert_info",
6969
"tmp_cert_file",
7070
"tmp_key_file",
71-
"validate_certificate"
71+
"validate_certificate",
72+
"extensions"
7273
]
7374

7475
SP_ARGS = [
@@ -213,6 +214,7 @@ def __init__(self, homedir="."):
213214
self.tmp_cert_file = None
214215
self.tmp_key_file = None
215216
self.validate_certificate = None
217+
self.extensions = {}
216218

217219
def setattr(self, context, attr, val):
218220
if context == "":
@@ -331,6 +333,9 @@ def load(self, cnf, metadata_construction=False):
331333
except KeyError:
332334
pass
333335

336+
if "extensions" in cnf:
337+
self.do_extensions(cnf["extensions"])
338+
334339
self.load_complex(cnf, metadata_construction=metadata_construction)
335340
self.context = self.def_context
336341

@@ -474,6 +479,11 @@ def endpoint2service(self, endpoint, context=None):
474479

475480
return None, None
476481

482+
def do_extensions(self, extensions):
483+
for key, val in extensions.items():
484+
self.extensions[key] = val
485+
486+
477487
class SPConfig(Config):
478488
def_context = "sp"
479489

src/saml2/extension/mdrpi.py

Lines changed: 74 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
NAMESPACE = 'urn:oasis:names:tc:SAML:metadata:rpi'
1313

14+
1415
class RegistrationPolicy(md.LocalizedURIType_):
1516
"""The urn:oasis:names:tc:SAML:metadata:rpi:RegistrationPolicy element """
1617

@@ -21,6 +22,7 @@ class RegistrationPolicy(md.LocalizedURIType_):
2122
c_child_order = md.LocalizedURIType_.c_child_order[:]
2223
c_cardinality = md.LocalizedURIType_.c_cardinality.copy()
2324

25+
2426
def registration_policy_from_string(xml_string):
2527
return saml2.create_class_from_xml_string(RegistrationPolicy, xml_string)
2628

@@ -35,6 +37,7 @@ class UsagePolicy(md.LocalizedURIType_):
3537
c_child_order = md.LocalizedURIType_.c_child_order[:]
3638
c_cardinality = md.LocalizedURIType_.c_cardinality.copy()
3739

40+
3841
def usage_policy_from_string(xml_string):
3942
return saml2.create_class_from_xml_string(UsagePolicy, xml_string)
4043

@@ -53,21 +56,20 @@ class PublicationType_(SamlBase):
5356
c_attributes['publicationId'] = ('publication_id', 'string', False)
5457

5558
def __init__(self,
56-
publisher=None,
57-
creation_instant=None,
58-
publication_id=None,
59-
text=None,
60-
extension_elements=None,
61-
extension_attributes=None
62-
):
63-
SamlBase.__init__(self,
64-
text=text,
65-
extension_elements=extension_elements,
66-
extension_attributes=extension_attributes,
67-
)
68-
self.publisher=publisher
69-
self.creation_instant=creation_instant
70-
self.publication_id=publication_id
59+
publisher=None,
60+
creation_instant=None,
61+
publication_id=None,
62+
text=None,
63+
extension_elements=None,
64+
extension_attributes=None):
65+
SamlBase.__init__(self,
66+
text=text,
67+
extension_elements=extension_elements,
68+
extension_attributes=extension_attributes)
69+
self.publisher = publisher
70+
self.creation_instant = creation_instant
71+
self.publication_id = publication_id
72+
7173

7274
def publication_type__from_string(xml_string):
7375
return saml2.create_class_from_xml_string(PublicationType_, xml_string)
@@ -82,28 +84,30 @@ class RegistrationInfoType_(SamlBase):
8284
c_attributes = SamlBase.c_attributes.copy()
8385
c_child_order = SamlBase.c_child_order[:]
8486
c_cardinality = SamlBase.c_cardinality.copy()
85-
c_children['{urn:oasis:names:tc:SAML:metadata:rpi}RegistrationPolicy'] = ('registration_policy', [RegistrationPolicy])
86-
c_cardinality['registration_policy'] = {"min":0}
87-
c_attributes['registrationAuthority'] = ('registration_authority', 'string', True)
88-
c_attributes['registrationInstant'] = ('registration_instant', 'dateTime', False)
87+
c_children['{urn:oasis:names:tc:SAML:metadata:rpi}RegistrationPolicy'] = (
88+
'registration_policy', [RegistrationPolicy])
89+
c_cardinality['registration_policy'] = {"min": 0}
90+
c_attributes['registrationAuthority'] = (
91+
'registration_authority', 'string', True)
92+
c_attributes['registrationInstant'] = (
93+
'registration_instant', 'dateTime', False)
8994
c_child_order.extend(['registration_policy'])
9095

9196
def __init__(self,
92-
registration_policy=None,
93-
registration_authority=None,
94-
registration_instant=None,
95-
text=None,
96-
extension_elements=None,
97-
extension_attributes=None
98-
):
99-
SamlBase.__init__(self,
100-
text=text,
101-
extension_elements=extension_elements,
102-
extension_attributes=extension_attributes,
103-
)
104-
self.registration_policy=registration_policy or []
105-
self.registration_authority=registration_authority
106-
self.registration_instant=registration_instant
97+
registration_policy=None,
98+
registration_authority=None,
99+
registration_instant=None,
100+
text=None,
101+
extension_elements=None,
102+
extension_attributes=None):
103+
SamlBase.__init__(self,
104+
text=text,
105+
extension_elements=extension_elements,
106+
extension_attributes=extension_attributes)
107+
self.registration_policy = registration_policy or []
108+
self.registration_authority = registration_authority
109+
self.registration_instant = registration_instant
110+
107111

108112
def registration_info_type__from_string(xml_string):
109113
return saml2.create_class_from_xml_string(RegistrationInfoType_, xml_string)
@@ -118,31 +122,31 @@ class PublicationInfoType_(SamlBase):
118122
c_attributes = SamlBase.c_attributes.copy()
119123
c_child_order = SamlBase.c_child_order[:]
120124
c_cardinality = SamlBase.c_cardinality.copy()
121-
c_children['{urn:oasis:names:tc:SAML:metadata:rpi}UsagePolicy'] = ('usage_policy', [UsagePolicy])
122-
c_cardinality['usage_policy'] = {"min":0}
125+
c_children['{urn:oasis:names:tc:SAML:metadata:rpi}UsagePolicy'] = (
126+
'usage_policy', [UsagePolicy])
127+
c_cardinality['usage_policy'] = {"min": 0}
123128
c_attributes['publisher'] = ('publisher', 'string', True)
124129
c_attributes['creationInstant'] = ('creation_instant', 'dateTime', False)
125130
c_attributes['publicationId'] = ('publication_id', 'string', False)
126131
c_child_order.extend(['usage_policy'])
127132

128133
def __init__(self,
129-
usage_policy=None,
130-
publisher=None,
131-
creation_instant=None,
132-
publication_id=None,
133-
text=None,
134-
extension_elements=None,
135-
extension_attributes=None
136-
):
137-
SamlBase.__init__(self,
138-
text=text,
139-
extension_elements=extension_elements,
140-
extension_attributes=extension_attributes,
141-
)
142-
self.usage_policy=usage_policy or []
143-
self.publisher=publisher
144-
self.creation_instant=creation_instant
145-
self.publication_id=publication_id
134+
usage_policy=None,
135+
publisher=None,
136+
creation_instant=None,
137+
publication_id=None,
138+
text=None,
139+
extension_elements=None,
140+
extension_attributes=None):
141+
SamlBase.__init__(self,
142+
text=text,
143+
extension_elements=extension_elements,
144+
extension_attributes=extension_attributes)
145+
self.usage_policy = usage_policy or []
146+
self.publisher = publisher
147+
self.creation_instant = creation_instant
148+
self.publication_id = publication_id
149+
146150

147151
def publication_info_type__from_string(xml_string):
148152
return saml2.create_class_from_xml_string(PublicationInfoType_, xml_string)
@@ -158,6 +162,7 @@ class Publication(PublicationType_):
158162
c_child_order = PublicationType_.c_child_order[:]
159163
c_cardinality = PublicationType_.c_cardinality.copy()
160164

165+
161166
def publication_from_string(xml_string):
162167
return saml2.create_class_from_xml_string(Publication, xml_string)
163168

@@ -172,6 +177,7 @@ class RegistrationInfo(RegistrationInfoType_):
172177
c_child_order = RegistrationInfoType_.c_child_order[:]
173178
c_cardinality = RegistrationInfoType_.c_cardinality.copy()
174179

180+
175181
def registration_info_from_string(xml_string):
176182
return saml2.create_class_from_xml_string(RegistrationInfo, xml_string)
177183

@@ -186,6 +192,7 @@ class PublicationInfo(PublicationInfoType_):
186192
c_child_order = PublicationInfoType_.c_child_order[:]
187193
c_cardinality = PublicationInfoType_.c_cardinality.copy()
188194

195+
189196
def publication_info_from_string(xml_string):
190197
return saml2.create_class_from_xml_string(PublicationInfo, xml_string)
191198

@@ -199,22 +206,22 @@ class PublicationPathType_(SamlBase):
199206
c_attributes = SamlBase.c_attributes.copy()
200207
c_child_order = SamlBase.c_child_order[:]
201208
c_cardinality = SamlBase.c_cardinality.copy()
202-
c_children['{urn:oasis:names:tc:SAML:metadata:rpi}Publication'] = ('publication', [Publication])
203-
c_cardinality['publication'] = {"min":0}
209+
c_children['{urn:oasis:names:tc:SAML:metadata:rpi}Publication'] = (
210+
'publication', [Publication])
211+
c_cardinality['publication'] = {"min": 0}
204212
c_child_order.extend(['publication'])
205213

206214
def __init__(self,
207-
publication=None,
208-
text=None,
209-
extension_elements=None,
210-
extension_attributes=None
211-
):
212-
SamlBase.__init__(self,
213-
text=text,
214-
extension_elements=extension_elements,
215-
extension_attributes=extension_attributes,
216-
)
217-
self.publication=publication or []
215+
publication=None,
216+
text=None,
217+
extension_elements=None,
218+
extension_attributes=None):
219+
SamlBase.__init__(self,
220+
text=text,
221+
extension_elements=extension_elements,
222+
extension_attributes=extension_attributes)
223+
self.publication = publication or []
224+
218225

219226
def publication_path_type__from_string(xml_string):
220227
return saml2.create_class_from_xml_string(PublicationPathType_, xml_string)
@@ -230,6 +237,7 @@ class PublicationPath(PublicationPathType_):
230237
c_child_order = PublicationPathType_.c_child_order[:]
231238
c_cardinality = PublicationPathType_.c_cardinality.copy()
232239

240+
233241
def publication_path_from_string(xml_string):
234242
return saml2.create_class_from_xml_string(PublicationPath, xml_string)
235243

0 commit comments

Comments
 (0)