Skip to content

Commit 46d10b2

Browse files
committed
Allow exceptions to directly set the StatusCode in an error response
Signed-off-by: Ivan Kanakarakis <[email protected]>
1 parent 82c25f2 commit 46d10b2

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

src/saml2/s_utils.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -218,29 +218,42 @@ def identity_attribute(form, attribute, forward_map=None):
218218

219219

220220
def error_status_factory(info):
221-
if isinstance(info, Exception):
221+
if not isinstance(info, Exception):
222+
(status_code_status_code_value, status_message_text) = info
223+
else:
222224
try:
223225
exc_val = EXCEPTION2STATUS[info.__class__]
224226
except KeyError:
225227
exc_val = samlp.STATUS_AUTHN_FAILED
228+
226229
try:
227-
msg = info.args[0]
230+
exc_context = info.args[0]
231+
err_ctx = (
232+
{"status_message_text": exc_context}
233+
if isinstance(exc_context, str)
234+
else exc_context
235+
)
228236
except IndexError:
229-
msg = "%s" % info
230-
else:
231-
(exc_val, msg) = info
237+
err_ctx = {"status_message_text": str(info)}
232238

233-
if msg:
234-
status_msg = samlp.StatusMessage(text=msg)
235-
else:
236-
status_msg = None
239+
status_message_text = err_ctx.get("status_message_text")
240+
status_code_status_code_value = err_ctx.get(
241+
"status_code_status_code_value", exc_val
242+
)
243+
244+
status_msg = (
245+
samlp.StatusMessage(text=status_message_text)
246+
if status_message_text
247+
else None
248+
)
237249

238250
status = samlp.Status(
239251
status_message=status_msg,
240252
status_code=samlp.StatusCode(
241253
value=samlp.STATUS_RESPONDER,
242-
status_code=samlp.StatusCode(
243-
value=exc_val)))
254+
status_code=samlp.StatusCode(value=status_code_status_code_value),
255+
),
256+
)
244257
return status
245258

246259

0 commit comments

Comments
 (0)