Skip to content

Commit 0bda673

Browse files
authored
fix: handle malformed token in verify_email_address (baserow#5375)
* fix: convert BadSignature to InvalidVerificationToken in verify_email_address * fix flaky test
1 parent ef90048 commit 0bda673

4 files changed

Lines changed: 22 additions & 2 deletions

File tree

backend/src/baserow/core/user/handler.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -938,7 +938,10 @@ def verify_email_address(self, token: str) -> User:
938938
"""
939939

940940
signer = self._get_email_verification_signer()
941-
token_data = signer.loads(token)
941+
try:
942+
token_data = signer.loads(token)
943+
except BadSignature as ex:
944+
raise InvalidVerificationToken() from ex
942945

943946
if datetime.fromisoformat(token_data["expires_at"]) < datetime.now(
944947
tz=timezone.utc

backend/tests/baserow/contrib/database/field/test_field_tasks.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,16 +363,18 @@ def test_all_formula_that_needs_updates_are_periodically_updated(data_fixture):
363363
table = data_fixture.create_database_table(database=database)
364364
with freeze_time("2023-02-27 10:15"):
365365
now_field = data_fixture.create_formula_field(
366-
table=table, formula="now()", date_include_time=True
366+
name="now", table=table, formula="now()", date_include_time=True
367367
)
368368
data_fixture.create_formula_field(
369+
name="ref_now",
369370
table=table,
370371
formula=f"field('{now_field.name}')",
371372
date_include_time=True,
372373
)
373374

374375
date_field = data_fixture.create_date_field(table=table, date_include_time=True)
375376
data_fixture.create_formula_field(
377+
name="now_vs_date",
376378
table=table,
377379
formula=f"now() > field('{date_field.name}')",
378380
date_include_time=True,

backend/tests/baserow/core/user/test_user_handler.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,12 @@ def test_verify_email_address_expired(data_fixture):
780780
UserHandler().verify_email_address(token)
781781

782782

783+
@pytest.mark.django_db
784+
def test_verify_email_address_malformed_token():
785+
with pytest.raises(InvalidVerificationToken):
786+
UserHandler().verify_email_address("not-a-real-token")
787+
788+
783789
@pytest.mark.django_db
784790
def test_verify_email_address_user_doesnt_exist(data_fixture):
785791
user = data_fixture.create_user()
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"type": "bug",
3+
"message": "Fixes a server error when submitting an invalid email verification token",
4+
"issue_origin": "github",
5+
"issue_number": 5374,
6+
"domain": "core",
7+
"bullet_points": [],
8+
"created_at": "2026-05-15"
9+
}

0 commit comments

Comments
 (0)