mirror of
https://github.com/zulip/zulip.git
synced 2025-11-21 23:19:10 +00:00
render_incoming_message: Require a realm object.
This commit is contained in:
@@ -763,9 +763,9 @@ def do_send_message(message, rendered_content=None, no_log=False, stream=None,
|
||||
'realm': realm,
|
||||
'local_id': local_id}])[0]
|
||||
|
||||
def render_incoming_message(message, content, message_users):
|
||||
# type: (Message, Text, Set[UserProfile]) -> Text
|
||||
realm_alert_words = alert_words_in_realm(message.get_realm())
|
||||
def render_incoming_message(message, content, message_users, realm):
|
||||
# type: (Message, Text, Set[UserProfile], Realm) -> Text
|
||||
realm_alert_words = alert_words_in_realm(realm)
|
||||
try:
|
||||
rendered_content = render_markdown(
|
||||
message=message,
|
||||
@@ -849,7 +849,8 @@ def do_send_messages(messages):
|
||||
rendered_content = render_incoming_message(
|
||||
message['message'],
|
||||
message['message'].content,
|
||||
message_users=message['active_recipients'])
|
||||
message['active_recipients'],
|
||||
message['realm'])
|
||||
message['message'].rendered_content = rendered_content
|
||||
message['message'].rendered_content_version = bugdown_version
|
||||
links_for_embed |= message['message'].links_for_preview
|
||||
@@ -940,6 +941,7 @@ def do_send_messages(messages):
|
||||
event_data = {
|
||||
'message_id': message['message'].id,
|
||||
'message_content': message['message'].content,
|
||||
'message_realm_id': message['realm'].id,
|
||||
'urls': links_for_embed}
|
||||
queue_json_publish('embed_links', event_data, lambda x: None)
|
||||
|
||||
|
||||
@@ -178,14 +178,20 @@ class PreviewTestCase(ZulipTestCase):
|
||||
response = MockPythonResponse(html, 200)
|
||||
mocked_response = mock.Mock(
|
||||
side_effect=lambda k: {url: response}.get(k, MockPythonResponse('', 404)))
|
||||
msg = Message.objects.select_related("sender").get(id=msg_id)
|
||||
self.assertNotIn(
|
||||
'<a href="{0}" target="_blank" title="The Rock">The Rock</a>'.format(url),
|
||||
msg.rendered_content)
|
||||
|
||||
event = {
|
||||
'message_id': msg_id,
|
||||
'urls': [url],
|
||||
'message_realm_id': msg.sender.realm_id,
|
||||
'message_content': url}
|
||||
with self.settings(INLINE_URL_EMBED_PREVIEW=True, TEST_SUITE=False, CACHES=TEST_CACHES):
|
||||
with mock.patch('requests.get', mocked_response):
|
||||
FetchLinksEmbedData().consume(event)
|
||||
msg = Message.objects.get(id=msg_id)
|
||||
msg = Message.objects.select_related("sender").get(id=msg_id)
|
||||
self.assertIn(
|
||||
'<a href="{0}" target="_blank" title="The Rock">The Rock</a>'.format(url),
|
||||
msg.rendered_content)
|
||||
@@ -196,9 +202,11 @@ class PreviewTestCase(ZulipTestCase):
|
||||
msg_id = self.send_message(
|
||||
"hamlet@zulip.com", "cordelia@zulip.com",
|
||||
Recipient.PERSONAL, subject="url", content=url)
|
||||
msg = Message.objects.select_related("sender").get(id=msg_id)
|
||||
event = {
|
||||
'message_id': msg_id,
|
||||
'urls': [url],
|
||||
'message_realm_id': msg.sender.realm_id,
|
||||
'message_content': url}
|
||||
with self.settings(INLINE_URL_EMBED_PREVIEW=True, TEST_SUITE=False, CACHES=TEST_CACHES):
|
||||
with mock.patch('requests.get', mock.Mock(side_effect=ConnectionError())):
|
||||
|
||||
@@ -931,10 +931,14 @@ def update_message_backend(request, user_profile,
|
||||
ums = UserMessage.objects.filter(message=message.id,
|
||||
flags=~UserMessage.flags.historical)
|
||||
message_users = {get_user_profile_by_id(um.user_profile_id) for um in ums}
|
||||
# If rendering fails, the called code will raise a JsonableError.
|
||||
# We render the message using the current user's realm; since
|
||||
# the cross-realm bots never edit messages, this should be
|
||||
# always correct.
|
||||
# Note: If rendering fails, the called code will raise a JsonableError.
|
||||
rendered_content = render_incoming_message(message,
|
||||
content=content,
|
||||
message_users=message_users)
|
||||
content,
|
||||
message_users,
|
||||
user_profile.realm)
|
||||
links_for_embed |= message.links_for_preview
|
||||
|
||||
do_update_message(user_profile, message, subject, propagate_mode, content, rendered_content)
|
||||
|
||||
@@ -6,7 +6,7 @@ from django.core.handlers.wsgi import WSGIRequest
|
||||
from django.core.handlers.base import BaseHandler
|
||||
from zerver.models import get_user_profile_by_email, \
|
||||
get_user_profile_by_id, get_prereg_user_by_email, get_client, \
|
||||
UserMessage, Message
|
||||
UserMessage, Message, Realm
|
||||
from zerver.lib.context_managers import lockfile
|
||||
from zerver.lib.queue import SimpleQueueClient, queue_json_publish
|
||||
from zerver.lib.timestamp import timestamp_to_datetime
|
||||
@@ -405,10 +405,15 @@ class FetchLinksEmbedData(QueueProcessingWorker):
|
||||
ums = UserMessage.objects.filter(
|
||||
message=message.id).select_related("user_profile")
|
||||
message_users = {um.user_profile for um in ums}
|
||||
|
||||
# Fetch the realm whose settings we're using for rendering
|
||||
realm = Realm.objects.get(id=event['message_realm_id'])
|
||||
|
||||
# If rendering fails, the called code will raise a JsonableError.
|
||||
rendered_content = render_incoming_message(
|
||||
message,
|
||||
content=message.content,
|
||||
message_users=message_users)
|
||||
message.content,
|
||||
message_users,
|
||||
realm)
|
||||
do_update_embedded_data(
|
||||
message.sender, message, message.content, rendered_content)
|
||||
|
||||
Reference in New Issue
Block a user