Skip to content

Commit ab7ca9b

Browse files
committed
Disable legacy unsub messages
1 parent 2288213 commit ab7ca9b

3 files changed

Lines changed: 16 additions & 40 deletions

File tree

app/handler/unsubscribe_encoder.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -108,27 +108,7 @@ def _get_signer() -> itsdangerous.Signer:
108108
@classmethod
109109
def decode_subject(cls, data: str) -> Optional[UnsubscribeData]:
110110
if data.find(UNSUB_PREFIX) == -1:
111-
try:
112-
# subject has the format {alias.id}=
113-
if data.endswith("="):
114-
alias_id = int(data[:-1])
115-
return UnsubscribeData(UnsubscribeAction.DisableAlias, alias_id)
116-
# {contact.id}_
117-
elif data.endswith("_"):
118-
contact_id = int(data[:-1])
119-
return UnsubscribeData(UnsubscribeAction.DisableContact, contact_id)
120-
# {user.id}*
121-
elif data.endswith("*"):
122-
user_id = int(data[:-1])
123-
return UnsubscribeData(
124-
UnsubscribeAction.UnsubscribeNewsletter, user_id
125-
)
126-
else:
127-
# some email providers might strip off the = suffix
128-
alias_id = int(data)
129-
return UnsubscribeData(UnsubscribeAction.DisableAlias, alias_id)
130-
except ValueError:
131-
return None
111+
return None
132112

133113
signer = cls._get_signer()
134114
try:

tests/handler/test_unsubscribe_encoder.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,15 @@
99
)
1010

1111
legacy_subject_test_data = [
12-
("3=", UnsubscribeData(UnsubscribeAction.DisableAlias, 3)),
13-
("438_", UnsubscribeData(UnsubscribeAction.DisableContact, 438)),
14-
("4325*", UnsubscribeData(UnsubscribeAction.UnsubscribeNewsletter, 4325)),
12+
"3=",
13+
"438_",
14+
"4325*",
1515
]
1616

1717

18-
@pytest.mark.parametrize("expected_subject, expected_deco", legacy_subject_test_data)
19-
def test_legacy_unsub_subject(expected_subject, expected_deco):
20-
info = UnsubscribeEncoder.decode_subject(expected_subject)
21-
assert info == expected_deco
18+
@pytest.mark.parametrize("legacy_subject", legacy_subject_test_data)
19+
def test_legacy_unsub_subject_rejected(legacy_subject):
20+
assert UnsubscribeEncoder.decode_subject(legacy_subject) is None
2221

2322

2423
legacy_url_test_data = [

tests/handler/test_unsubscribe_handler.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,18 @@ def _get_envelope_and_message(user: User, subject: str) -> (Envelope, Message):
2929

3030

3131
@mail_sender.store_emails_test_decorator
32-
def test_old_subject_disable_alias():
32+
def test_old_subject_disable_alias_rejected():
3333
user = create_new_user()
3434
alias = Alias.create_new_random(user)
3535
Session.commit()
3636
envelope, message = _get_envelope_and_message(user, f"{alias.id}=")
3737
response = UnsubscribeHandler().handle_unsubscribe_from_message(envelope, message)
38-
assert status.E202 == response
39-
assert not Alias.get(alias.id).enabled
40-
assert 1 == len(mail_sender.get_stored_emails())
38+
assert status.E507 == response
39+
assert Alias.get(alias.id).enabled
4140

4241

4342
@mail_sender.store_emails_test_decorator
44-
def test_old_subject_block_contact():
43+
def test_old_subject_block_contact_rejected():
4544
user = create_new_user()
4645
alias = Alias.create_new_random(user)
4746
Session.commit()
@@ -55,19 +54,17 @@ def test_old_subject_block_contact():
5554
)
5655
envelope, message = _get_envelope_and_message(user, f"{contact.id}_")
5756
response = UnsubscribeHandler().handle_unsubscribe_from_message(envelope, message)
58-
assert status.E202 == response
59-
assert Contact.get(contact.id).block_forward
60-
assert 1 == len(mail_sender.get_stored_emails())
57+
assert status.E507 == response
58+
assert not Contact.get(contact.id).block_forward
6159

6260

6361
@mail_sender.store_emails_test_decorator
64-
def test_old_subject_disable_newsletter():
62+
def test_old_subject_disable_newsletter_rejected():
6563
user = create_new_user()
6664
envelope, message = _get_envelope_and_message(user, f"{user.id}*")
6765
response = UnsubscribeHandler().handle_unsubscribe_from_message(envelope, message)
68-
assert status.E202 == response
69-
assert not User.get(user.id).notification
70-
assert 1 == len(mail_sender.get_stored_emails())
66+
assert status.E507 == response
67+
assert User.get(user.id).notification
7168

7269

7370
@mail_sender.store_emails_test_decorator

0 commit comments

Comments
 (0)