summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-02-04 01:44:50 +0200
committerLV-426 <lv-426@taproot.org.il>2015-02-04 01:44:50 +0200
commit0414bf7d702aa06ca051a5748480673a1078d89b (patch)
treee493b0b17eb139cacc215ecf5f3b626a6bcf7fd4
parenta541560238f0807ece664ddd67a933e9dd6a7f6d (diff)
rest__user_signup(): sanitize_and_validate_input, regex based implementation
-rw-r--r--src/server/rz_user.py40
1 files changed, 24 insertions, 16 deletions
diff --git a/src/server/rz_user.py b/src/server/rz_user.py
index a82081d7..1551c20c 100644
--- a/src/server/rz_user.py
+++ b/src/server/rz_user.py
@@ -134,27 +134,35 @@ def rest__user_signup():
key = us_req['email_address']
del us_req_map[key]
- def sanitize_input(req):
+ def sanitize_and_validate_input(req):
req_json = request.get_json()
+
+ # TODO: sanitize
+ field_to_regex_map = {'first_name': r'\w{3,16}',
+ 'last_name': r'\w{3,16}',
+ 'rz_username': r'\w{3,16}',
+ 'email_address': r'[^@]+@[^@]+\.[^@]+',
+ 'pw_plaintxt': r'[A-Za-z0-9]{8,32}', # avoid symbols
+ }
+
+ 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 == re.match(regex, f_val):
+ raise Exception('malformed signup request: regex match failure: regex: %s, input: %s' % (regex, f_val))
+
first_name = req_json['first_name']
last_name = req_json['last_name']
- rz_username = req_json['rhizi_username']
+ rz_username = req_json['rz_username']
email_address = req_json['email_address']
+ pw_plaintxt = req_json['pw_plaintxt']
- ret = User_Signup_Request(rz_username=rz_username,
- email_address=email_address,
+ ret = User_Signup_Request(email_address=email_address,
+ first_name=first_name,
last_name=last_name,
- first_name=first_name)
-
- # TODO: augment
- for k, v in ret.items():
- if k in ['submission_date', 'validation_key']:
- continue
-
- if len(v) > 32:
- raise Exception('malformed signup request: len(%s) > 32' % (k))
- if len(v) < 3:
- raise Exception('malformed signup request: len(%s) < 4' % (k))
+ pw_plaintxt=pw_plaintxt,
+ rz_username=rz_username)
return ret
@@ -189,7 +197,7 @@ def rest__user_signup():
# if req_json['captcha_solution'] = ...
try:
- us_req = sanitize_input(request)
+ us_req = sanitize_and_validate_input(request)
except Exception as e:
log.exception(e)
return make_response__json__html(status=400, html_str=html_err__tech_difficulty)