Compare commits
4 Commits
d600dde97f
...
df832e2238
| Author | SHA1 | Date | |
|---|---|---|---|
| df832e2238 | |||
| 3e1715e487 | |||
| 11e7fda997 | |||
| 09d42b14c5 |
@@ -231,6 +231,13 @@ def mark_for_deletion():
|
|||||||
# Mark for deletion
|
# Mark for deletion
|
||||||
user.marked_for_deletion = True
|
user.marked_for_deletion = True
|
||||||
user.marked_for_deletion_at = datetime.now(timezone.utc).isoformat()
|
user.marked_for_deletion_at = datetime.now(timezone.utc).isoformat()
|
||||||
|
|
||||||
|
# Invalidate any outstanding verification/reset tokens so they cannot be used after marking
|
||||||
|
user.verify_token = None
|
||||||
|
user.verify_token_created = None
|
||||||
|
user.reset_token = None
|
||||||
|
user.reset_token_created = None
|
||||||
|
|
||||||
users_db.update(user.to_dict(), UserQuery.id == user.id)
|
users_db.update(user.to_dict(), UserQuery.id == user.id)
|
||||||
|
|
||||||
# Trigger SSE event
|
# Trigger SSE event
|
||||||
|
|||||||
@@ -168,6 +168,35 @@ def test_mark_for_deletion_updates_timestamp(authenticated_client):
|
|||||||
|
|
||||||
assert before_time <= marked_at <= after_time
|
assert before_time <= marked_at <= after_time
|
||||||
|
|
||||||
|
|
||||||
|
def test_mark_for_deletion_clears_tokens(authenticated_client):
|
||||||
|
"""When an account is marked for deletion, verify/reset tokens must be cleared."""
|
||||||
|
# Seed verify/reset tokens for the user
|
||||||
|
UserQuery = Query()
|
||||||
|
now_iso = datetime.utcnow().isoformat()
|
||||||
|
users_db.update({
|
||||||
|
'verify_token': 'verify-abc',
|
||||||
|
'verify_token_created': now_iso,
|
||||||
|
'reset_token': 'reset-xyz',
|
||||||
|
'reset_token_created': now_iso
|
||||||
|
}, UserQuery.email == TEST_EMAIL)
|
||||||
|
|
||||||
|
# Ensure tokens are present before marking
|
||||||
|
user_before = users_db.search(UserQuery.email == TEST_EMAIL)[0]
|
||||||
|
assert user_before['verify_token'] is not None
|
||||||
|
assert user_before['reset_token'] is not None
|
||||||
|
|
||||||
|
# Mark account for deletion
|
||||||
|
response = authenticated_client.post('/user/mark-for-deletion', json={"email": TEST_EMAIL})
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
# Verify tokens were cleared in the DB
|
||||||
|
user_after = users_db.search(UserQuery.email == TEST_EMAIL)[0]
|
||||||
|
assert user_after.get('verify_token') is None
|
||||||
|
assert user_after.get('verify_token_created') is None
|
||||||
|
assert user_after.get('reset_token') is None
|
||||||
|
assert user_after.get('reset_token_created') is None
|
||||||
|
|
||||||
def test_mark_for_deletion_with_invalid_jwt(client):
|
def test_mark_for_deletion_with_invalid_jwt(client):
|
||||||
"""Test marking for deletion with invalid JWT token."""
|
"""Test marking for deletion with invalid JWT token."""
|
||||||
# Set invalid cookie manually
|
# Set invalid cookie manually
|
||||||
|
|||||||
Reference in New Issue
Block a user