summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKali Kaneko (leap communications) <kali@leap.se>2016-10-05 15:49:06 -0400
committerKali Kaneko (leap communications) <kali@leap.se>2016-10-07 10:22:38 -0400
commit7edd1fcaed438a0566d37386ce8604f2565b4e6e (patch)
tree762abbd36f79737156744f22381fa5593c5121b4 /src
parentd270b7f11e404a3904fa32ed581196a4fa4e8604 (diff)
[refactor] do not print traceback for expected errors
Add the ability to declare an exceptions as 'expected'. This will avoid logging the backtrace on the bitmaskd log. We will just forward the message in the json that we return to the caller. - Resolves: #8506
Diffstat (limited to 'src')
-rw-r--r--src/leap/bitmask/bonafide/_srp.py4
-rw-r--r--src/leap/bitmask/core/dispatcher.py14
2 files changed, 15 insertions, 3 deletions
diff --git a/src/leap/bitmask/bonafide/_srp.py b/src/leap/bitmask/bonafide/_srp.py
index 3f69b33..3939c5a 100644
--- a/src/leap/bitmask/bonafide/_srp.py
+++ b/src/leap/bitmask/bonafide/_srp.py
@@ -133,7 +133,9 @@ class SRPSignupMechanism(object):
msg = 'username ' + msg[0]
else:
msg = 'unknown signup error'
- raise SRPRegistrationError(msg)
+ error = SRPRegistrationError(msg)
+ error.expected = True
+ raise error
else:
username = signup.get('login')
return username
diff --git a/src/leap/bitmask/core/dispatcher.py b/src/leap/bitmask/core/dispatcher.py
index 6a5603e..783094a 100644
--- a/src/leap/bitmask/core/dispatcher.py
+++ b/src/leap/bitmask/core/dispatcher.py
@@ -465,6 +465,16 @@ def _format_result(result):
def _format_error(failure):
- # TODO --- should check if the failure has the 'expected' attribute set
- logger.failure('[DISPATCHER] Uncatched error:')
+ """
+ Logs the failure backtrace, and returns a json containing the error
+ message.
+ """
+
+ # If a exception declares the 'expected' attribute as True,
+ # we will not print a full traceback
+ expected = getattr(failure.value, 'expected', False)
+ if not expected:
+ logger.failure('[DISPATCHER] Unexpected error:')
+
+ # if needed, we could add here the exception type as an extra field
return json.dumps({'error': failure.value.message, 'result': None})