Skip to content

Commit 20923e6

Browse files
committed
check if email value is a string in default_email_validator func
1 parent d73ef44 commit 20923e6

File tree

3 files changed

+31
-37
lines changed

3 files changed

+31
-37
lines changed

supertokens_python/recipe/emailpassword/api/utils.py

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -54,35 +54,28 @@ async def validate_form_or_throw_error(
5454
async def validate_form_fields_or_throw_error(
5555
config_form_fields: List[NormalisedFormField], form_fields_raw: Any
5656
) -> List[FormField]:
57-
try:
58-
if form_fields_raw is None:
59-
raise_bad_input_exception("Missing input param: formFields")
57+
if form_fields_raw is None:
58+
raise_bad_input_exception("Missing input param: formFields")
6059

61-
if not isinstance(form_fields_raw, List):
62-
raise_bad_input_exception("formFields must be an array")
60+
if not isinstance(form_fields_raw, List):
61+
raise_bad_input_exception("formFields must be an array")
6362

64-
form_fields: List[FormField] = []
63+
form_fields: List[FormField] = []
6564

66-
form_fields_list_raw: List[Dict[str, Any]] = form_fields_raw
67-
for current_form_field in form_fields_list_raw:
68-
if (
69-
"id" not in current_form_field
70-
or not isinstance(current_form_field["id"], str)
71-
or "value" not in current_form_field
72-
):
73-
raise_bad_input_exception(
74-
"All elements of formFields must contain an 'id' and 'value' field"
75-
)
76-
value = current_form_field["value"]
77-
if current_form_field["id"] == FORM_FIELD_EMAIL_ID:
78-
if not isinstance(value, str):
79-
raise_bad_input_exception("email value must be a string")
80-
value = value.strip()
81-
form_fields.append(FormField(current_form_field["id"], value))
65+
form_fields_list_raw: List[Dict[str, Any]] = form_fields_raw
66+
for current_form_field in form_fields_list_raw:
67+
if (
68+
"id" not in current_form_field
69+
or not isinstance(current_form_field["id"], str)
70+
or "value" not in current_form_field
71+
):
72+
raise_bad_input_exception(
73+
"All elements of formFields must contain an 'id' and 'value' field"
74+
)
75+
value = current_form_field["value"]
76+
if current_form_field["id"] == FORM_FIELD_EMAIL_ID and isinstance(value, str):
77+
value = value.strip()
78+
form_fields.append(FormField(current_form_field["id"], value))
8279

83-
await validate_form_or_throw_error(form_fields, config_form_fields)
84-
return form_fields
85-
except Exception:
86-
raise_bad_input_exception(
87-
"Something seems wrong with the input formFields. Please check the request body."
88-
)
80+
await validate_form_or_throw_error(form_fields, config_form_fields)
81+
return form_fields

supertokens_python/recipe/emailpassword/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,11 @@ async def default_password_validator(value: str) -> Union[str, None]:
7070
return None
7171

7272

73-
async def default_email_validator(value: str) -> Union[str, None]:
73+
async def default_email_validator(value: Any) -> Union[str, None]:
7474
# We check if the email syntax is correct
7575
# As per https://github.com/supertokens/supertokens-auth-react/issues/5#issuecomment-709512438
7676
# Regex from https://stackoverflow.com/a/46181/3867175
77-
if (
77+
if (not isinstance(value, str)) or (
7878
fullmatch(
7979
r'^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,'
8080
r"3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$",

tests/emailpassword/test_passwordreset.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,15 @@ async def test_email_validation_checks_in_generate_token_API(
107107
)
108108
start_st()
109109

110-
response_1 = driver_config_client.post(
111-
url="/auth/user/password/reset/token",
112-
json={"formFields": [{"id": "email", "value": "random"}]},
113-
)
110+
for invalid_email in ["random", 5]:
111+
res = driver_config_client.post(
112+
url="/auth/user/password/reset/token",
113+
json={"formFields": [{"id": "email", "value": invalid_email}]},
114+
)
114115

115-
assert response_1.status_code == 200
116-
dict_response = json.loads(response_1.text)
117-
assert dict_response["status"] == "FIELD_ERROR"
116+
assert res.status_code == 200
117+
dict_res = json.loads(res.text)
118+
assert dict_res["status"] == "FIELD_ERROR"
118119

119120

120121
@mark.asyncio

0 commit comments

Comments
 (0)