mirror of
https://github.com/zulip/zulip.git
synced 2025-11-13 18:36:36 +00:00
refactor: Separate get channel email token logic from email encoding.
This commit extracts the logic for creating or retrieving a channel email token into a dedicated `get_channel_email_token` function. This improves code clarity by decoupling token generation from the email encoding process.
This commit is contained in:
committed by
Tim Abbott
parent
864a2a067e
commit
2bb4b70121
@@ -48,17 +48,17 @@ def get_email_gateway_message_string_from_address(address: str) -> str:
|
|||||||
return msg_string
|
return msg_string
|
||||||
|
|
||||||
|
|
||||||
def encode_email_address(stream: Stream, show_sender: bool = False) -> str:
|
def get_channel_email_token(stream: Stream) -> str:
|
||||||
channel_email_address, ignored = ChannelEmailAddress.objects.get_or_create(
|
channel_email_address, ignored = ChannelEmailAddress.objects.get_or_create(
|
||||||
realm=stream.realm,
|
realm=stream.realm,
|
||||||
channel=stream,
|
channel=stream,
|
||||||
creator=stream.creator,
|
creator=stream.creator,
|
||||||
sender=get_system_bot(settings.EMAIL_GATEWAY_BOT, stream.realm_id),
|
sender=get_system_bot(settings.EMAIL_GATEWAY_BOT, stream.realm_id),
|
||||||
)
|
)
|
||||||
return encode_email_address_helper(stream.name, channel_email_address.email_token, show_sender)
|
return channel_email_address.email_token
|
||||||
|
|
||||||
|
|
||||||
def encode_email_address_helper(name: str, email_token: str, show_sender: bool = False) -> str:
|
def encode_email_address(name: str, email_token: str, show_sender: bool = False) -> str:
|
||||||
# Some deployments may not use the email gateway
|
# Some deployments may not use the email gateway
|
||||||
if settings.EMAIL_GATEWAY_PATTERN == "":
|
if settings.EMAIL_GATEWAY_PATTERN == "":
|
||||||
return ""
|
return ""
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from django.core.management.base import CommandError, CommandParser
|
|||||||
from typing_extensions import override
|
from typing_extensions import override
|
||||||
|
|
||||||
from zerver.lib.email_mirror import mirror_email_message
|
from zerver.lib.email_mirror import mirror_email_message
|
||||||
from zerver.lib.email_mirror_helpers import encode_email_address
|
from zerver.lib.email_mirror_helpers import encode_email_address, get_channel_email_token
|
||||||
from zerver.lib.management import ZulipBaseCommand
|
from zerver.lib.management import ZulipBaseCommand
|
||||||
from zerver.models import Realm
|
from zerver.models import Realm
|
||||||
from zerver.models.realms import get_realm
|
from zerver.models.realms import get_realm
|
||||||
@@ -111,6 +111,7 @@ Example:
|
|||||||
|
|
||||||
def _prepare_message(self, message: EmailMessage, realm: Realm, stream_name: str) -> None:
|
def _prepare_message(self, message: EmailMessage, realm: Realm, stream_name: str) -> None:
|
||||||
stream = get_stream(stream_name, realm)
|
stream = get_stream(stream_name, realm)
|
||||||
|
email_token = get_channel_email_token(stream)
|
||||||
|
|
||||||
# The block below ensures that the imported email message doesn't have any recipient-like
|
# The block below ensures that the imported email message doesn't have any recipient-like
|
||||||
# headers that are inconsistent with the recipient we want (the stream address).
|
# headers that are inconsistent with the recipient we want (the stream address).
|
||||||
@@ -125,8 +126,8 @@ Example:
|
|||||||
for header in recipient_headers:
|
for header in recipient_headers:
|
||||||
if header in message:
|
if header in message:
|
||||||
del message[header]
|
del message[header]
|
||||||
message[header] = encode_email_address(stream)
|
message[header] = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
if "To" in message:
|
if "To" in message:
|
||||||
del message["To"]
|
del message["To"]
|
||||||
message["To"] = encode_email_address(stream)
|
message["To"] = encode_email_address(stream.name, email_token)
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ from zerver.lib.email_mirror_helpers import (
|
|||||||
ZulipEmailForwardError,
|
ZulipEmailForwardError,
|
||||||
decode_email_address,
|
decode_email_address,
|
||||||
encode_email_address,
|
encode_email_address,
|
||||||
|
get_channel_email_token,
|
||||||
get_email_gateway_message_string_from_address,
|
get_email_gateway_message_string_from_address,
|
||||||
)
|
)
|
||||||
from zerver.lib.email_notifications import convert_html_to_markdown
|
from zerver.lib.email_notifications import convert_html_to_markdown
|
||||||
@@ -38,7 +39,7 @@ from zerver.lib.send_email import FromAddress
|
|||||||
from zerver.lib.streams import ensure_stream
|
from zerver.lib.streams import ensure_stream
|
||||||
from zerver.lib.test_classes import ZulipTestCase
|
from zerver.lib.test_classes import ZulipTestCase
|
||||||
from zerver.lib.test_helpers import mock_queue_publish, most_recent_message, most_recent_usermessage
|
from zerver.lib.test_helpers import mock_queue_publish, most_recent_message, most_recent_usermessage
|
||||||
from zerver.models import Attachment, ChannelEmailAddress, Recipient, Stream, UserProfile
|
from zerver.models import Attachment, Recipient, Stream, UserProfile
|
||||||
from zerver.models.groups import NamedUserGroup, SystemGroups
|
from zerver.models.groups import NamedUserGroup, SystemGroups
|
||||||
from zerver.models.messages import Message
|
from zerver.models.messages import Message
|
||||||
from zerver.models.realms import get_realm
|
from zerver.models.realms import get_realm
|
||||||
@@ -74,8 +75,8 @@ class TestEncodeDecode(ZulipTestCase):
|
|||||||
realm = get_realm("zulip")
|
realm = get_realm("zulip")
|
||||||
stream_name = "dev. help"
|
stream_name = "dev. help"
|
||||||
stream = ensure_stream(realm, stream_name, acting_user=None)
|
stream = ensure_stream(realm, stream_name, acting_user=None)
|
||||||
email_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
email_token = ChannelEmailAddress.objects.get(channel=stream).email_token
|
email_address = encode_email_address(stream.name, email_token)
|
||||||
self.assertEqual(email_address, f"dev-help.{email_token}@testserver")
|
self.assertEqual(email_address, f"dev-help.{email_token}@testserver")
|
||||||
|
|
||||||
# The default form of the email address (with an option - "include-footer"):
|
# The default form of the email address (with an option - "include-footer"):
|
||||||
@@ -130,8 +131,8 @@ class TestEncodeDecode(ZulipTestCase):
|
|||||||
realm = get_realm("zulip")
|
realm = get_realm("zulip")
|
||||||
stream_name = "Тестовы some ascii letters"
|
stream_name = "Тестовы some ascii letters"
|
||||||
stream = ensure_stream(realm, stream_name, acting_user=None)
|
stream = ensure_stream(realm, stream_name, acting_user=None)
|
||||||
email_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
email_token = ChannelEmailAddress.objects.get(channel=stream).email_token
|
email_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
msg_string = get_email_gateway_message_string_from_address(email_address)
|
msg_string = get_email_gateway_message_string_from_address(email_address)
|
||||||
parts = msg_string.split("+")
|
parts = msg_string.split("+")
|
||||||
@@ -146,13 +147,14 @@ class TestEncodeDecode(ZulipTestCase):
|
|||||||
|
|
||||||
asciiable_stream_name = "ąężć"
|
asciiable_stream_name = "ąężć"
|
||||||
stream = ensure_stream(realm, asciiable_stream_name, acting_user=None)
|
stream = ensure_stream(realm, asciiable_stream_name, acting_user=None)
|
||||||
email_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
email_address = encode_email_address(stream.name, email_token)
|
||||||
self.assertTrue(email_address.startswith("aezc."))
|
self.assertTrue(email_address.startswith("aezc."))
|
||||||
|
|
||||||
def test_decode_ignores_stream_name(self) -> None:
|
def test_decode_ignores_stream_name(self) -> None:
|
||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
email_token = ChannelEmailAddress.objects.get(channel=stream).email_token
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
stream_to_address = stream_to_address.replace("denmark", "Some_name")
|
stream_to_address = stream_to_address.replace("denmark", "Some_name")
|
||||||
|
|
||||||
# get the email_token:
|
# get the email_token:
|
||||||
@@ -161,8 +163,8 @@ class TestEncodeDecode(ZulipTestCase):
|
|||||||
|
|
||||||
def test_encode_with_show_sender(self) -> None:
|
def test_encode_with_show_sender(self) -> None:
|
||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
stream_to_address = encode_email_address(stream, show_sender=True)
|
email_token = get_channel_email_token(stream)
|
||||||
email_token = ChannelEmailAddress.objects.get(channel=stream).email_token
|
stream_to_address = encode_email_address(stream.name, email_token, show_sender=True)
|
||||||
|
|
||||||
token, options = decode_email_address(stream_to_address)
|
token, options = decode_email_address(stream_to_address)
|
||||||
self._assert_options(options, show_sender=True)
|
self._assert_options(options, show_sender=True)
|
||||||
@@ -170,8 +172,8 @@ class TestEncodeDecode(ZulipTestCase):
|
|||||||
|
|
||||||
def test_decode_prefer_text_options(self) -> None:
|
def test_decode_prefer_text_options(self) -> None:
|
||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
email_token = ChannelEmailAddress.objects.get(channel=stream).email_token
|
encode_email_address(stream.name, email_token)
|
||||||
address_prefer_text = f"Denmark.{email_token}.prefer-text@testserver"
|
address_prefer_text = f"Denmark.{email_token}.prefer-text@testserver"
|
||||||
address_prefer_html = f"Denmark.{email_token}.prefer-html@testserver"
|
address_prefer_html = f"Denmark.{email_token}.prefer-html@testserver"
|
||||||
|
|
||||||
@@ -236,7 +238,8 @@ class TestStreamEmailMessages(ZulipTestCase):
|
|||||||
def create_incoming_valid_message(
|
def create_incoming_valid_message(
|
||||||
self, msgtext: str, stream: Stream, include_quotes: bool
|
self, msgtext: str, stream: Stream, include_quotes: bool
|
||||||
) -> EmailMessage:
|
) -> EmailMessage:
|
||||||
address = Address(addr_spec=encode_email_address(stream))
|
email_token = get_channel_email_token(stream)
|
||||||
|
address = Address(addr_spec=encode_email_address(stream.name, email_token))
|
||||||
email_username = address.username + "+show-sender"
|
email_username = address.username + "+show-sender"
|
||||||
if include_quotes:
|
if include_quotes:
|
||||||
email_username += "+include-quotes"
|
email_username += "+include-quotes"
|
||||||
@@ -258,7 +261,8 @@ class TestStreamEmailMessages(ZulipTestCase):
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
||||||
@@ -286,7 +290,8 @@ class TestStreamEmailMessages(ZulipTestCase):
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
||||||
@@ -313,7 +318,8 @@ class TestStreamEmailMessages(ZulipTestCase):
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
||||||
@@ -340,7 +346,8 @@ class TestStreamEmailMessages(ZulipTestCase):
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
||||||
@@ -371,7 +378,8 @@ class TestStreamEmailMessages(ZulipTestCase):
|
|||||||
self.subscribe(user_profile, "private_stream")
|
self.subscribe(user_profile, "private_stream")
|
||||||
stream = get_stream("private_stream", user_profile.realm)
|
stream = get_stream("private_stream", user_profile.realm)
|
||||||
|
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
||||||
@@ -397,9 +405,10 @@ class TestStreamEmailMessages(ZulipTestCase):
|
|||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
# stream address is angle-addr within multiple addresses
|
# stream address is angle-addr within multiple addresses
|
||||||
|
email_token = get_channel_email_token(stream)
|
||||||
stream_to_addresses = [
|
stream_to_addresses = [
|
||||||
"A.N. Other <another@example.org>",
|
"A.N. Other <another@example.org>",
|
||||||
f"Denmark <{encode_email_address(stream)}>",
|
f"Denmark <{encode_email_address(stream.name, email_token)}>",
|
||||||
]
|
]
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
@@ -513,7 +522,8 @@ and other things
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
address = Address(addr_spec=encode_email_address(stream))
|
email_token = get_channel_email_token(stream)
|
||||||
|
address = Address(addr_spec=encode_email_address(stream.name, email_token))
|
||||||
email_username = address.username + "+show-sender"
|
email_username = address.username + "+show-sender"
|
||||||
stream_to_address = Address(username=email_username, domain=address.domain).addr_spec
|
stream_to_address = Address(username=email_username, domain=address.domain).addr_spec
|
||||||
|
|
||||||
@@ -544,7 +554,8 @@ and other things
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
address = Address(addr_spec=encode_email_address(stream))
|
email_token = get_channel_email_token(stream)
|
||||||
|
address = Address(addr_spec=encode_email_address(stream.name, email_token))
|
||||||
email_username = address.username + "+include-footer"
|
email_username = address.username + "+include-footer"
|
||||||
stream_to_address = Address(username=email_username, domain=address.domain).addr_spec
|
stream_to_address = Address(username=email_username, domain=address.domain).addr_spec
|
||||||
|
|
||||||
@@ -572,7 +583,8 @@ and other things
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
address = Address(addr_spec=encode_email_address(stream))
|
email_token = get_channel_email_token(stream)
|
||||||
|
address = Address(addr_spec=encode_email_address(stream.name, email_token))
|
||||||
email_username = address.username + "+include-quotes"
|
email_username = address.username + "+include-quotes"
|
||||||
stream_to_address = Address(username=email_username, domain=address.domain).addr_spec
|
stream_to_address = Address(username=email_username, domain=address.domain).addr_spec
|
||||||
|
|
||||||
@@ -603,7 +615,8 @@ class TestEmailMirrorMessagesWithAttachments(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("Test body")
|
incoming_valid_message.set_content("Test body")
|
||||||
@@ -648,7 +661,8 @@ class TestEmailMirrorMessagesWithAttachments(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("Test body")
|
incoming_valid_message.set_content("Test body")
|
||||||
@@ -686,7 +700,8 @@ class TestEmailMirrorMessagesWithAttachments(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("a" * settings.MAX_MESSAGE_LENGTH)
|
incoming_valid_message.set_content("a" * settings.MAX_MESSAGE_LENGTH)
|
||||||
@@ -728,7 +743,8 @@ class TestEmailMirrorMessagesWithAttachments(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("Test body")
|
incoming_valid_message.set_content("Test body")
|
||||||
@@ -771,7 +787,8 @@ class TestEmailMirrorMessagesWithAttachments(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("Test body")
|
incoming_valid_message.set_content("Test body")
|
||||||
@@ -817,7 +834,8 @@ class TestEmailMirrorMessagesWithAttachments(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("Test body")
|
incoming_valid_message.set_content("Test body")
|
||||||
@@ -847,8 +865,8 @@ class TestEmailMirrorMessagesWithAttachments(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
email_token = ChannelEmailAddress.objects.get(channel=stream).email_token
|
encode_email_address(stream.name, email_token)
|
||||||
stream_address = f"Denmark.{email_token}@testserver"
|
stream_address = f"Denmark.{email_token}@testserver"
|
||||||
stream_address_prefer_html = f"Denmark.{email_token}.prefer-html@testserver"
|
stream_address_prefer_html = f"Denmark.{email_token}.prefer-html@testserver"
|
||||||
|
|
||||||
@@ -882,8 +900,8 @@ class TestEmailMirrorMessagesWithAttachments(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
email_token = ChannelEmailAddress.objects.get(channel=stream).email_token
|
encode_email_address(stream.name, email_token)
|
||||||
stream_address_prefer_html = f"Denmark.{email_token}.prefer-html@testserver"
|
stream_address_prefer_html = f"Denmark.{email_token}.prefer-html@testserver"
|
||||||
|
|
||||||
text = "Test message"
|
text = "Test message"
|
||||||
@@ -951,7 +969,8 @@ class TestStreamEmailMessagesEmptyBody(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
# empty body
|
# empty body
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
@@ -974,7 +993,8 @@ class TestStreamEmailMessagesEmptyBody(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
# No textual body
|
# No textual body
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
with open(
|
with open(
|
||||||
@@ -1007,7 +1027,8 @@ class TestStreamEmailMessagesEmptyBody(ZulipTestCase):
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
headers = {}
|
headers = {}
|
||||||
headers["Reply-To"] = self.example_email("othello")
|
headers["Reply-To"] = self.example_email("othello")
|
||||||
|
|
||||||
@@ -1393,7 +1414,8 @@ class TestEmptyGatewaySetting(ZulipTestCase):
|
|||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
|
|
||||||
with self.settings(EMAIL_GATEWAY_PATTERN=""):
|
with self.settings(EMAIL_GATEWAY_PATTERN=""):
|
||||||
test_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
test_address = encode_email_address(stream.name, email_token)
|
||||||
self.assertEqual(test_address, "")
|
self.assertEqual(test_address, "")
|
||||||
|
|
||||||
|
|
||||||
@@ -1418,7 +1440,8 @@ class TestReplyExtraction(ZulipTestCase):
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
text = """Reply
|
text = """Reply
|
||||||
|
|
||||||
-----Original Message-----
|
-----Original Message-----
|
||||||
@@ -1455,7 +1478,8 @@ class TestReplyExtraction(ZulipTestCase):
|
|||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
html = """
|
html = """
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
@@ -1504,7 +1528,8 @@ class TestScriptMTA(ZulipTestCase):
|
|||||||
|
|
||||||
sender = self.example_email("hamlet")
|
sender = self.example_email("hamlet")
|
||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
mail_template = self.fixture_data("simple.txt", type="email")
|
mail_template = self.fixture_data("simple.txt", type="email")
|
||||||
mail = mail_template.format(stream_to_address=stream_to_address, sender=sender)
|
mail = mail_template.format(stream_to_address=stream_to_address, sender=sender)
|
||||||
@@ -1520,7 +1545,8 @@ class TestScriptMTA(ZulipTestCase):
|
|||||||
|
|
||||||
sender = self.example_email("hamlet")
|
sender = self.example_email("hamlet")
|
||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
mail_template = self.fixture_data("simple.txt", type="email")
|
mail_template = self.fixture_data("simple.txt", type="email")
|
||||||
mail = mail_template.format(stream_to_address=stream_to_address, sender=sender)
|
mail = mail_template.format(stream_to_address=stream_to_address, sender=sender)
|
||||||
p = subprocess.run(
|
p = subprocess.run(
|
||||||
@@ -1587,13 +1613,15 @@ class TestEmailMirrorTornadoView(ZulipTestCase):
|
|||||||
|
|
||||||
def test_success_stream(self) -> None:
|
def test_success_stream(self) -> None:
|
||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
result = self.send_offline_message(stream_to_address, self.example_user("hamlet"))
|
result = self.send_offline_message(stream_to_address, self.example_user("hamlet"))
|
||||||
self.assert_json_success(result)
|
self.assert_json_success(result)
|
||||||
|
|
||||||
def test_error_to_stream_with_wrong_address(self) -> None:
|
def test_error_to_stream_with_wrong_address(self) -> None:
|
||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
# get the email_token:
|
# get the email_token:
|
||||||
token = decode_email_address(stream_to_address)[0]
|
token = decode_email_address(stream_to_address)[0]
|
||||||
stream_to_address = stream_to_address.replace(token, "Wrong_token")
|
stream_to_address = stream_to_address.replace(token, "Wrong_token")
|
||||||
@@ -1607,7 +1635,8 @@ class TestEmailMirrorTornadoView(ZulipTestCase):
|
|||||||
|
|
||||||
def test_success_to_stream_with_good_token_wrong_stream_name(self) -> None:
|
def test_success_to_stream_with_good_token_wrong_stream_name(self) -> None:
|
||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
stream_to_address = stream_to_address.replace("denmark", "Wrong_name")
|
stream_to_address = stream_to_address.replace("denmark", "Wrong_name")
|
||||||
|
|
||||||
result = self.send_offline_message(stream_to_address, self.example_user("hamlet"))
|
result = self.send_offline_message(stream_to_address, self.example_user("hamlet"))
|
||||||
@@ -1641,7 +1670,8 @@ class TestStreamEmailMessagesSubjectStripping(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
incoming_valid_message.set_content("TestStreamEmailMessages body")
|
||||||
incoming_valid_message["Subject"] = "Re: Fwd: Re: AW: Test"
|
incoming_valid_message["Subject"] = "Re: Fwd: Re: AW: Test"
|
||||||
@@ -1683,7 +1713,8 @@ class TestContentTypeUnspecifiedCharset(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
del incoming_message["To"]
|
del incoming_message["To"]
|
||||||
incoming_message["To"] = stream_to_address
|
incoming_message["To"] = stream_to_address
|
||||||
@@ -1708,7 +1739,8 @@ class TestContentTypeInvalidCharset(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "Denmark")
|
self.subscribe(user_profile, "Denmark")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
del incoming_message["To"]
|
del incoming_message["To"]
|
||||||
incoming_message["To"] = stream_to_address
|
incoming_message["To"] = stream_to_address
|
||||||
@@ -1740,7 +1772,8 @@ class TestEmailMirrorLogAndReport(ZulipTestCase):
|
|||||||
self.login_user(user_profile)
|
self.login_user(user_profile)
|
||||||
self.subscribe(user_profile, "errors")
|
self.subscribe(user_profile, "errors")
|
||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
|
|
||||||
incoming_valid_message = EmailMessage()
|
incoming_valid_message = EmailMessage()
|
||||||
incoming_valid_message.set_content("Test body")
|
incoming_valid_message.set_content("Test body")
|
||||||
@@ -1772,7 +1805,8 @@ class TestEmailMirrorLogAndReport(ZulipTestCase):
|
|||||||
stream = get_stream("Denmark", user_profile.realm)
|
stream = get_stream("Denmark", user_profile.realm)
|
||||||
|
|
||||||
# Test for a stream address:
|
# Test for a stream address:
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
address = Address(addr_spec=stream_to_address)
|
address = Address(addr_spec=stream_to_address)
|
||||||
scrubbed_stream_address = Address(
|
scrubbed_stream_address = Address(
|
||||||
username="X" * len(address.username), domain=address.domain
|
username="X" * len(address.username), domain=address.domain
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from django.test import override_settings
|
|||||||
from typing_extensions import override
|
from typing_extensions import override
|
||||||
|
|
||||||
from zerver.lib.email_mirror import RateLimitedRealmMirror
|
from zerver.lib.email_mirror import RateLimitedRealmMirror
|
||||||
from zerver.lib.email_mirror_helpers import encode_email_address
|
from zerver.lib.email_mirror_helpers import encode_email_address, get_channel_email_token
|
||||||
from zerver.lib.queue import MAX_REQUEST_RETRIES
|
from zerver.lib.queue import MAX_REQUEST_RETRIES
|
||||||
from zerver.lib.rate_limiter import RateLimiterLockingError
|
from zerver.lib.rate_limiter import RateLimiterLockingError
|
||||||
from zerver.lib.remote_server import PushNotificationBouncerRetryLaterError
|
from zerver.lib.remote_server import PushNotificationBouncerRetryLaterError
|
||||||
@@ -574,7 +574,8 @@ class WorkerTest(ZulipTestCase):
|
|||||||
def test_mirror_worker(self, mock_mirror_email: MagicMock) -> None:
|
def test_mirror_worker(self, mock_mirror_email: MagicMock) -> None:
|
||||||
fake_client = FakeClient()
|
fake_client = FakeClient()
|
||||||
stream = get_stream("Denmark", get_realm("zulip"))
|
stream = get_stream("Denmark", get_realm("zulip"))
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
data = [
|
data = [
|
||||||
dict(
|
dict(
|
||||||
msg_base64=base64.b64encode(b"\xf3test").decode(),
|
msg_base64=base64.b64encode(b"\xf3test").decode(),
|
||||||
@@ -599,7 +600,8 @@ class WorkerTest(ZulipTestCase):
|
|||||||
realm = get_realm("zulip")
|
realm = get_realm("zulip")
|
||||||
RateLimitedRealmMirror(realm).clear_history()
|
RateLimitedRealmMirror(realm).clear_history()
|
||||||
stream = get_stream("Denmark", realm)
|
stream = get_stream("Denmark", realm)
|
||||||
stream_to_address = encode_email_address(stream)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_to_address = encode_email_address(stream.name, email_token)
|
||||||
data = [
|
data = [
|
||||||
dict(
|
dict(
|
||||||
msg_base64=base64.b64encode(b"\xf3test").decode(),
|
msg_base64=base64.b64encode(b"\xf3test").decode(),
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ from zerver.lib.default_streams import (
|
|||||||
get_default_stream_ids_for_realm,
|
get_default_stream_ids_for_realm,
|
||||||
get_slim_realm_default_streams,
|
get_slim_realm_default_streams,
|
||||||
)
|
)
|
||||||
from zerver.lib.email_mirror_helpers import encode_email_address_helper
|
from zerver.lib.email_mirror_helpers import encode_email_address, get_channel_email_token
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
from zerver.lib.message import UnreadStreamInfo, aggregate_unread_data, get_raw_unread_data
|
from zerver.lib.message import UnreadStreamInfo, aggregate_unread_data, get_raw_unread_data
|
||||||
from zerver.lib.response import json_success
|
from zerver.lib.response import json_success
|
||||||
@@ -107,7 +107,6 @@ from zerver.lib.types import (
|
|||||||
from zerver.lib.user_groups import is_user_in_group
|
from zerver.lib.user_groups import is_user_in_group
|
||||||
from zerver.models import (
|
from zerver.models import (
|
||||||
Attachment,
|
Attachment,
|
||||||
ChannelEmailAddress,
|
|
||||||
DefaultStream,
|
DefaultStream,
|
||||||
DefaultStreamGroup,
|
DefaultStreamGroup,
|
||||||
Message,
|
Message,
|
||||||
@@ -6164,10 +6163,8 @@ class GetStreamsTest(ZulipTestCase):
|
|||||||
denmark_stream = get_stream("Denmark", realm)
|
denmark_stream = get_stream("Denmark", realm)
|
||||||
result = self.client_get(f"/json/streams/{denmark_stream.id}/email_address")
|
result = self.client_get(f"/json/streams/{denmark_stream.id}/email_address")
|
||||||
json = self.assert_json_success(result)
|
json = self.assert_json_success(result)
|
||||||
email_token = ChannelEmailAddress.objects.get(channel=denmark_stream).email_token
|
email_token = get_channel_email_token(denmark_stream)
|
||||||
denmark_email = encode_email_address_helper(
|
denmark_email = encode_email_address(denmark_stream.name, email_token, show_sender=True)
|
||||||
denmark_stream.name, email_token, show_sender=True
|
|
||||||
)
|
|
||||||
self.assertEqual(json["email"], denmark_email)
|
self.assertEqual(json["email"], denmark_email)
|
||||||
|
|
||||||
self.login("polonius")
|
self.login("polonius")
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ from zerver.decorator import (
|
|||||||
require_realm_admin,
|
require_realm_admin,
|
||||||
)
|
)
|
||||||
from zerver.lib.default_streams import get_default_stream_ids_for_realm
|
from zerver.lib.default_streams import get_default_stream_ids_for_realm
|
||||||
from zerver.lib.email_mirror_helpers import encode_email_address
|
from zerver.lib.email_mirror_helpers import encode_email_address, get_channel_email_token
|
||||||
from zerver.lib.exceptions import (
|
from zerver.lib.exceptions import (
|
||||||
CannotManageDefaultChannelError,
|
CannotManageDefaultChannelError,
|
||||||
JsonableError,
|
JsonableError,
|
||||||
@@ -1133,6 +1133,7 @@ def get_stream_email_address(
|
|||||||
user_profile,
|
user_profile,
|
||||||
stream_id,
|
stream_id,
|
||||||
)
|
)
|
||||||
stream_email = encode_email_address(stream, show_sender=True)
|
email_token = get_channel_email_token(stream)
|
||||||
|
stream_email = encode_email_address(stream.name, email_token, show_sender=True)
|
||||||
|
|
||||||
return json_success(request, data={"email": stream_email})
|
return json_success(request, data={"email": stream_email})
|
||||||
|
|||||||
Reference in New Issue
Block a user