36
36
37
37
logger = logging .getLogger (__name__ )
38
38
39
+
39
40
class XmlParseError (Exception ):
40
41
pass
41
42
43
+
42
44
class WrongMessageType (Exception ):
43
45
pass
44
46
47
+
45
48
def parse_soap_enveloped_saml_response (text ):
46
49
tags = ['{%s}Response' % SAMLP_NAMESPACE ,
47
50
'{%s}LogoutResponse' % SAMLP_NAMESPACE ]
48
51
return parse_soap_enveloped_saml_thingy (text , tags )
49
52
53
+
50
54
def parse_soap_enveloped_saml_logout_response (text ):
51
55
tags = ['{%s}Response' % SAMLP_NAMESPACE ,
52
56
'{%s}LogoutResponse' % SAMLP_NAMESPACE ]
53
57
return parse_soap_enveloped_saml_thingy (text , tags )
54
58
59
+
55
60
def parse_soap_enveloped_saml_attribute_query (text ):
56
61
expected_tag = '{%s}AttributeQuery' % SAMLP_NAMESPACE
57
62
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
58
63
64
+
59
65
def parse_soap_enveloped_saml_attribute_response (text ):
60
66
tags = ['{%s}Response' % SAMLP_NAMESPACE ,
61
67
'{%s}AttributeResponse' % SAMLP_NAMESPACE ]
62
68
return parse_soap_enveloped_saml_thingy (text , tags )
63
69
70
+
64
71
def parse_soap_enveloped_saml_logout_request (text ):
65
72
expected_tag = '{%s}LogoutRequest' % SAMLP_NAMESPACE
66
73
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
67
74
75
+
68
76
def parse_soap_enveloped_saml_authn_request (text ):
69
77
expected_tag = '{%s}AuthnRequest' % SAMLP_NAMESPACE
70
78
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
71
79
80
+
72
81
def parse_soap_enveloped_saml_artifact_resolve (text ):
73
82
expected_tag = '{%s}ArtifactResolve' % SAMLP_NAMESPACE
74
83
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
75
84
85
+
76
86
def parse_soap_enveloped_saml_artifact_response (text ):
77
87
expected_tag = '{%s}ArtifactResponse' % SAMLP_NAMESPACE
78
88
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
79
89
90
+
80
91
def parse_soap_enveloped_saml_name_id_mapping_request (text ):
81
92
expected_tag = '{%s}NameIDMappingRequest' % SAMLP_NAMESPACE
82
93
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
83
94
95
+
84
96
def parse_soap_enveloped_saml_name_id_mapping_response (text ):
85
97
expected_tag = '{%s}NameIDMappingResponse' % SAMLP_NAMESPACE
86
98
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
87
99
100
+
88
101
def parse_soap_enveloped_saml_manage_name_id_request (text ):
89
102
expected_tag = '{%s}ManageNameIDRequest' % SAMLP_NAMESPACE
90
103
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
91
104
105
+
92
106
def parse_soap_enveloped_saml_manage_name_id_response (text ):
93
107
expected_tag = '{%s}ManageNameIDResponse' % SAMLP_NAMESPACE
94
108
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
95
109
110
+
96
111
def parse_soap_enveloped_saml_assertion_id_request (text ):
97
112
expected_tag = '{%s}AssertionIDRequest' % SAMLP_NAMESPACE
98
113
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
99
114
115
+
100
116
def parse_soap_enveloped_saml_assertion_id_response (text ):
101
117
tags = ['{%s}Response' % SAMLP_NAMESPACE ,
102
- '{%s}AssertionIDResponse' % SAMLP_NAMESPACE ]
118
+ '{%s}AssertionIDResponse' % SAMLP_NAMESPACE ]
103
119
return parse_soap_enveloped_saml_thingy (text , tags )
104
120
121
+
105
122
def parse_soap_enveloped_saml_authn_query (text ):
106
123
expected_tag = '{%s}AuthnQuery' % SAMLP_NAMESPACE
107
124
return parse_soap_enveloped_saml_thingy (text , [expected_tag ])
108
125
126
+
109
127
def parse_soap_enveloped_saml_authn_query_response (text ):
110
128
tags = ['{%s}Response' % SAMLP_NAMESPACE ]
111
129
return parse_soap_enveloped_saml_thingy (text , tags )
112
130
131
+
113
132
def parse_soap_enveloped_saml_authn_response (text ):
114
133
tags = ['{%s}Response' % SAMLP_NAMESPACE ]
115
134
return parse_soap_enveloped_saml_thingy (text , tags )
@@ -154,9 +173,10 @@ def parse_soap_enveloped_saml_thingy(text, expected_tags):
154
173
155
174
NS_AND_TAG = re .compile ("\{([^}]+)\}(.*)" )
156
175
176
+
157
177
def instanciate_class (item , modules ):
158
178
m = NS_AND_TAG .match (item .tag )
159
- ns ,tag = m .groups ()
179
+ ns , tag = m .groups ()
160
180
for module in modules :
161
181
if module .NAMESPACE == ns :
162
182
try :
@@ -166,6 +186,7 @@ def instanciate_class(item, modules):
166
186
continue
167
187
raise Exception ("Unknown class: ns='%s', tag='%s'" % (ns , tag ))
168
188
189
+
169
190
def class_instances_from_soap_enveloped_saml_thingies (text , modules ):
170
191
"""Parses a SOAP enveloped header and body SAML thing and returns the
171
192
thing as a dictionary class instance.
@@ -181,7 +202,7 @@ def class_instances_from_soap_enveloped_saml_thingies(text, modules):
181
202
182
203
assert envelope .tag == '{%s}Envelope' % soapenv .NAMESPACE
183
204
assert len (envelope ) >= 1
184
- env = {"header" :[], "body" :None }
205
+ env = {"header" : [], "body" : None }
185
206
186
207
for part in envelope :
187
208
if part .tag == '{%s}Body' % soapenv .NAMESPACE :
@@ -193,6 +214,7 @@ def class_instances_from_soap_enveloped_saml_thingies(text, modules):
193
214
194
215
return env
195
216
217
+
196
218
def open_soap_envelope (text ):
197
219
"""
198
220
@@ -206,7 +228,7 @@ def open_soap_envelope(text):
206
228
207
229
assert envelope .tag == '{%s}Envelope' % soapenv .NAMESPACE
208
230
assert len (envelope ) >= 1
209
- content = {"header" :[], "body" :None }
231
+ content = {"header" : [], "body" : None }
210
232
211
233
for part in envelope :
212
234
if part .tag == '{%s}Body' % soapenv .NAMESPACE :
@@ -219,6 +241,7 @@ def open_soap_envelope(text):
219
241
220
242
return content
221
243
244
+
222
245
def make_soap_enveloped_saml_thingy (thingy , headers = None ):
223
246
""" Returns a soap envelope containing a SAML request
224
247
as a text string.
@@ -238,6 +261,7 @@ def make_soap_enveloped_saml_thingy(thingy, headers=None):
238
261
239
262
return "%s" % soap_envelope
240
263
264
+
241
265
def soap_fault (message = None , actor = None , code = None , detail = None ):
242
266
""" Create a SOAP Fault message
243
267
0 commit comments