mirror of
https://github.com/simple-login/app.git
synced 2025-09-10 16:44:35 +08:00
Add config to force http unsub for a certain set of users (#2425)
This commit is contained in:
parent
9e8ee6467c
commit
a0ba3b1a71
2 changed files with 13 additions and 6 deletions
|
@ -195,6 +195,7 @@ DISABLE_ALIAS_SUFFIX = "DISABLE_ALIAS_SUFFIX" in os.environ
|
||||||
|
|
||||||
# the email address that receives all unsubscription request
|
# the email address that receives all unsubscription request
|
||||||
UNSUBSCRIBER = os.environ.get("UNSUBSCRIBER")
|
UNSUBSCRIBER = os.environ.get("UNSUBSCRIBER")
|
||||||
|
USERS_WITH_HTTP_UNSUBSCRIBE = get_env_csv("USERS_WITH_HTTP_UNSUBSCRIBE", "")
|
||||||
|
|
||||||
# due to a typo, both UNSUBSCRIBER and OLD_UNSUBSCRIBER are supported
|
# due to a typo, both UNSUBSCRIBER and OLD_UNSUBSCRIBER are supported
|
||||||
OLD_UNSUBSCRIBER = os.environ.get("OLD_UNSUBSCRIBER")
|
OLD_UNSUBSCRIBER = os.environ.get("OLD_UNSUBSCRIBER")
|
||||||
|
|
|
@ -17,7 +17,7 @@ from app.models import Alias, Contact, UnsubscribeBehaviourEnum
|
||||||
|
|
||||||
class UnsubscribeGenerator:
|
class UnsubscribeGenerator:
|
||||||
def _calculate_header_with_original_behaviour(
|
def _calculate_header_with_original_behaviour(
|
||||||
self, alias: Alias, message: Message
|
self, alias: Alias, message: Message, force_web: bool = False
|
||||||
) -> dict[str, str]:
|
) -> dict[str, str]:
|
||||||
"""
|
"""
|
||||||
Generate a header that will encode the original unsub request. To do so
|
Generate a header that will encode the original unsub request. To do so
|
||||||
|
@ -83,6 +83,7 @@ class UnsubscribeGenerator:
|
||||||
unsub_link = UnsubscribeEncoder.encode(
|
unsub_link = UnsubscribeEncoder.encode(
|
||||||
UnsubscribeAction.OriginalUnsubscribeMailto,
|
UnsubscribeAction.OriginalUnsubscribeMailto,
|
||||||
UnsubscribeOriginalData(alias.id, mailto_unsubs[0], mailto_unsubs[1]),
|
UnsubscribeOriginalData(alias.id, mailto_unsubs[0], mailto_unsubs[1]),
|
||||||
|
force_web=force_web,
|
||||||
)
|
)
|
||||||
LOG.debug(f"Adding unsub link {unsub_link.link}")
|
LOG.debug(f"Adding unsub link {unsub_link.link}")
|
||||||
out = {headers.LIST_UNSUBSCRIBE: f"<{unsub_link.link}>"}
|
out = {headers.LIST_UNSUBSCRIBE: f"<{unsub_link.link}>"}
|
||||||
|
@ -100,9 +101,11 @@ class UnsubscribeGenerator:
|
||||||
return message
|
return message
|
||||||
|
|
||||||
def _add_unsubscribe_header(
|
def _add_unsubscribe_header(
|
||||||
self, message: Message, unsub: UnsubscribeData
|
self, message: Message, unsub: UnsubscribeData, force_web: bool = False
|
||||||
) -> Message:
|
) -> Message:
|
||||||
unsub_link = UnsubscribeEncoder.encode(unsub.action, unsub.data)
|
unsub_link = UnsubscribeEncoder.encode(
|
||||||
|
unsub.action, unsub.data, force_web=force_web
|
||||||
|
)
|
||||||
|
|
||||||
add_or_replace_header(message, headers.LIST_UNSUBSCRIBE, f"<{unsub_link.link}>")
|
add_or_replace_header(message, headers.LIST_UNSUBSCRIBE, f"<{unsub_link.link}>")
|
||||||
if not unsub_link.via_email:
|
if not unsub_link.via_email:
|
||||||
|
@ -117,19 +120,22 @@ class UnsubscribeGenerator:
|
||||||
"""
|
"""
|
||||||
Add List-Unsubscribe header based on the user preference.
|
Add List-Unsubscribe header based on the user preference.
|
||||||
"""
|
"""
|
||||||
|
force_web = False
|
||||||
|
if alias.user_id in config.USERS_WITH_HTTP_UNSUBSCRIBE:
|
||||||
|
force_web = True
|
||||||
unsub_behaviour = alias.user.unsub_behaviour
|
unsub_behaviour = alias.user.unsub_behaviour
|
||||||
original_unsub_proxied = self._calculate_header_with_original_behaviour(
|
original_unsub_proxied = self._calculate_header_with_original_behaviour(
|
||||||
alias, message
|
alias, message, force_web=force_web
|
||||||
)
|
)
|
||||||
message = self.__preserve_original_headers(message, original_unsub_proxied)
|
message = self.__preserve_original_headers(message, original_unsub_proxied)
|
||||||
if unsub_behaviour == UnsubscribeBehaviourEnum.PreserveOriginal:
|
if unsub_behaviour == UnsubscribeBehaviourEnum.PreserveOriginal:
|
||||||
return self.__replace_unsub_headers(message, original_unsub_proxied)
|
return self.__replace_unsub_headers(message, original_unsub_proxied)
|
||||||
elif unsub_behaviour == UnsubscribeBehaviourEnum.DisableAlias:
|
elif unsub_behaviour == UnsubscribeBehaviourEnum.DisableAlias:
|
||||||
unsub = UnsubscribeData(UnsubscribeAction.DisableAlias, alias.id)
|
unsub = UnsubscribeData(UnsubscribeAction.DisableAlias, alias.id)
|
||||||
return self._add_unsubscribe_header(message, unsub)
|
return self._add_unsubscribe_header(message, unsub, force_web=force_web)
|
||||||
else:
|
else:
|
||||||
unsub = UnsubscribeData(UnsubscribeAction.DisableContact, contact.id)
|
unsub = UnsubscribeData(UnsubscribeAction.DisableContact, contact.id)
|
||||||
return self._add_unsubscribe_header(message, unsub)
|
return self._add_unsubscribe_header(message, unsub, force_web=force_web)
|
||||||
|
|
||||||
def __preserve_original_headers(
|
def __preserve_original_headers(
|
||||||
self, message: Message, original_unsub_proxied: dict[str, str]
|
self, message: Message, original_unsub_proxied: dict[str, str]
|
||||||
|
|
Loading…
Add table
Reference in a new issue