summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kanakarakis <ivan.kanak@gmail.com>2022-06-28 15:11:12 +0300
committerIvan Kanakarakis <ivan.kanak@gmail.com>2022-06-28 15:11:12 +0300
commit46d10b24e8816245e4105457faf4418a3b6b0e97 (patch)
tree076615262e51c91d87ad646a7b2e8734f3b3c0c8
parent82c25f2994fcc6ee88cef468e28b4f630c8cca4e (diff)
downloadpysaml2-46d10b24e8816245e4105457faf4418a3b6b0e97.tar.gz
Allow exceptions to directly set the StatusCode in an error response
Signed-off-by: Ivan Kanakarakis <ivan.kanak@gmail.com>
-rw-r--r--src/saml2/s_utils.py35
1 files changed, 24 insertions, 11 deletions
diff --git a/src/saml2/s_utils.py b/src/saml2/s_utils.py
index c2e8ef71..f0d983c9 100644
--- a/src/saml2/s_utils.py
+++ b/src/saml2/s_utils.py
@@ -218,29 +218,42 @@ def identity_attribute(form, attribute, forward_map=None):
def error_status_factory(info):
- if isinstance(info, Exception):
+ if not isinstance(info, Exception):
+ (status_code_status_code_value, status_message_text) = info
+ else:
try:
exc_val = EXCEPTION2STATUS[info.__class__]
except KeyError:
exc_val = samlp.STATUS_AUTHN_FAILED
+
try:
- msg = info.args[0]
+ exc_context = info.args[0]
+ err_ctx = (
+ {"status_message_text": exc_context}
+ if isinstance(exc_context, str)
+ else exc_context
+ )
except IndexError:
- msg = "%s" % info
- else:
- (exc_val, msg) = info
+ err_ctx = {"status_message_text": str(info)}
- if msg:
- status_msg = samlp.StatusMessage(text=msg)
- else:
- status_msg = None
+ status_message_text = err_ctx.get("status_message_text")
+ status_code_status_code_value = err_ctx.get(
+ "status_code_status_code_value", exc_val
+ )
+
+ status_msg = (
+ samlp.StatusMessage(text=status_message_text)
+ if status_message_text
+ else None
+ )
status = samlp.Status(
status_message=status_msg,
status_code=samlp.StatusCode(
value=samlp.STATUS_RESPONDER,
- status_code=samlp.StatusCode(
- value=exc_val)))
+ status_code=samlp.StatusCode(value=status_code_status_code_value),
+ ),
+ )
return status