summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-04-02 23:05:47 +0300
committerLV-426 <lv-426@taproot.org.il>2015-04-02 23:05:47 +0300
commitdc085289e7d50e729e3ce85ad6e5bb6efada70bd (patch)
treebe29ffb6d101d11b5bcbb4f7c26f149d57a15a62 /src
parente53b90f5c0deb2d665f1bb3333e53eaaedc0bc14 (diff)
rz_user: improve caller error handling - use API_Exception__bad_request's caller_err_msg
Diffstat (limited to 'src')
-rw-r--r--src/server/rz_api_common.py6
-rw-r--r--src/server/rz_user.py14
2 files changed, 16 insertions, 4 deletions
diff --git a/src/server/rz_api_common.py b/src/server/rz_api_common.py
index 5f2b66a3..7261ab2b 100644
--- a/src/server/rz_api_common.py
+++ b/src/server/rz_api_common.py
@@ -13,7 +13,11 @@ from rz_kernel import RZDoc_Exception__not_found
log = logging.getLogger('rhizi')
-class API_Exception__bad_request(Exception): pass # raised by input sanitation functions
+class API_Exception__bad_request(Exception): # raised by input sanitation functions
+
+ def __init__(self, internal_err_msg, caller_err_msg = None):
+ super(API_Exception__bad_request, self).__init__(internal_err_msg)
+ self.caller_err_msg = None # may be set to carry short string error messages which may be presented to the caller
def __sanitize_input(*args, **kw_args):
pass
diff --git a/src/server/rz_user.py b/src/server/rz_user.py
index 92fff699..9ef7abc0 100644
--- a/src/server/rz_user.py
+++ b/src/server/rz_user.py
@@ -17,6 +17,7 @@ import crypt_util
from rz_mail import send_email_message
from rz_req_handling import make_response__json, make_response__json__html
from rz_user_db import User_Account
+from rz_api_common import API_Exception__bad_request
log = logging.getLogger('rhizi')
@@ -314,10 +315,14 @@ def rest__user_signup():
for f_name, regex in field_to_regex_map.items():
f_val = req_json.get(f_name)
- if None == f_val:
- raise Exception('malformed signup request: missing field: %s' % (f_name))
+ if None == f_val or 0 == len(f_val):
+ e = API_Exception__bad_request('malformed signup request: missing field: %s' % (f_name))
+ e.caller_err_msg = 'Missing value: %s' % (f_name.replace('_', ' '))
+ raise e
if None == re.match(regex, f_val):
- raise Exception('malformed signup request: regex match failure: regex: %s, input: %s' % (regex, f_val))
+ e = API_Exception__bad_request('malformed signup request: regex match failure: regex: %s, input: %s' % (regex, f_val))
+ e.caller_err_msg = 'Illegal value: %s' % (f_val)
+ raise e
first_name = req_json['first_name']
last_name = req_json['last_name']
@@ -358,6 +363,9 @@ def rest__user_signup():
try:
us_req = sanitize_and_validate_input(request)
+ except API_Exception__bad_request as e:
+ log.exception(e)
+ return make_response__json__html(status=400, html_str='<p>%s</p>' % (e.caller_err_msg))
except Exception as e:
log.exception(e)
return make_response__json__html(status=400, html_str=html_err__tech_difficulty)