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,
|
'realm': realm,
|
||||||
'local_id': local_id}])[0]
|
'local_id': local_id}])[0]
|
||||||
|
|
||||||
def render_incoming_message(message, content, message_users):
|
def render_incoming_message(message, content, message_users, realm):
|
||||||
# type: (Message, Text, Set[UserProfile]) -> Text
|
# type: (Message, Text, Set[UserProfile], Realm) -> Text
|
||||||
realm_alert_words = alert_words_in_realm(message.get_realm())
|
realm_alert_words = alert_words_in_realm(realm)
|
||||||
try:
|
try:
|
||||||
rendered_content = render_markdown(
|
rendered_content = render_markdown(
|
||||||
message=message,
|
message=message,
|
||||||
@@ -849,7 +849,8 @@ def do_send_messages(messages):
|
|||||||
rendered_content = render_incoming_message(
|
rendered_content = render_incoming_message(
|
||||||
message['message'],
|
message['message'],
|
||||||
message['message'].content,
|
message['message'].content,
|
||||||
message_users=message['active_recipients'])
|
message['active_recipients'],
|
||||||
|
message['realm'])
|
||||||
message['message'].rendered_content = rendered_content
|
message['message'].rendered_content = rendered_content
|
||||||
message['message'].rendered_content_version = bugdown_version
|
message['message'].rendered_content_version = bugdown_version
|
||||||
links_for_embed |= message['message'].links_for_preview
|
links_for_embed |= message['message'].links_for_preview
|
||||||
@@ -940,6 +941,7 @@ def do_send_messages(messages):
|
|||||||
event_data = {
|
event_data = {
|
||||||
'message_id': message['message'].id,
|
'message_id': message['message'].id,
|
||||||
'message_content': message['message'].content,
|
'message_content': message['message'].content,
|
||||||
|
'message_realm_id': message['realm'].id,
|
||||||
'urls': links_for_embed}
|
'urls': links_for_embed}
|
||||||
queue_json_publish('embed_links', event_data, lambda x: None)
|
queue_json_publish('embed_links', event_data, lambda x: None)
|
||||||
|
|
||||||
|
|||||||
@@ -178,14 +178,20 @@ class PreviewTestCase(ZulipTestCase):
|
|||||||
response = MockPythonResponse(html, 200)
|
response = MockPythonResponse(html, 200)
|
||||||
mocked_response = mock.Mock(
|
mocked_response = mock.Mock(
|
||||||
side_effect=lambda k: {url: response}.get(k, MockPythonResponse('', 404)))
|
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 = {
|
event = {
|
||||||
'message_id': msg_id,
|
'message_id': msg_id,
|
||||||
'urls': [url],
|
'urls': [url],
|
||||||
|
'message_realm_id': msg.sender.realm_id,
|
||||||
'message_content': url}
|
'message_content': url}
|
||||||
with self.settings(INLINE_URL_EMBED_PREVIEW=True, TEST_SUITE=False, CACHES=TEST_CACHES):
|
with self.settings(INLINE_URL_EMBED_PREVIEW=True, TEST_SUITE=False, CACHES=TEST_CACHES):
|
||||||
with mock.patch('requests.get', mocked_response):
|
with mock.patch('requests.get', mocked_response):
|
||||||
FetchLinksEmbedData().consume(event)
|
FetchLinksEmbedData().consume(event)
|
||||||
msg = Message.objects.get(id=msg_id)
|
msg = Message.objects.select_related("sender").get(id=msg_id)
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
'<a href="{0}" target="_blank" title="The Rock">The Rock</a>'.format(url),
|
'<a href="{0}" target="_blank" title="The Rock">The Rock</a>'.format(url),
|
||||||
msg.rendered_content)
|
msg.rendered_content)
|
||||||
@@ -196,9 +202,11 @@ class PreviewTestCase(ZulipTestCase):
|
|||||||
msg_id = self.send_message(
|
msg_id = self.send_message(
|
||||||
"hamlet@zulip.com", "cordelia@zulip.com",
|
"hamlet@zulip.com", "cordelia@zulip.com",
|
||||||
Recipient.PERSONAL, subject="url", content=url)
|
Recipient.PERSONAL, subject="url", content=url)
|
||||||
|
msg = Message.objects.select_related("sender").get(id=msg_id)
|
||||||
event = {
|
event = {
|
||||||
'message_id': msg_id,
|
'message_id': msg_id,
|
||||||
'urls': [url],
|
'urls': [url],
|
||||||
|
'message_realm_id': msg.sender.realm_id,
|
||||||
'message_content': url}
|
'message_content': url}
|
||||||
with self.settings(INLINE_URL_EMBED_PREVIEW=True, TEST_SUITE=False, CACHES=TEST_CACHES):
|
with self.settings(INLINE_URL_EMBED_PREVIEW=True, TEST_SUITE=False, CACHES=TEST_CACHES):
|
||||||
with mock.patch('requests.get', mock.Mock(side_effect=ConnectionError())):
|
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,
|
ums = UserMessage.objects.filter(message=message.id,
|
||||||
flags=~UserMessage.flags.historical)
|
flags=~UserMessage.flags.historical)
|
||||||
message_users = {get_user_profile_by_id(um.user_profile_id) for um in ums}
|
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,
|
rendered_content = render_incoming_message(message,
|
||||||
content=content,
|
content,
|
||||||
message_users=message_users)
|
message_users,
|
||||||
|
user_profile.realm)
|
||||||
links_for_embed |= message.links_for_preview
|
links_for_embed |= message.links_for_preview
|
||||||
|
|
||||||
do_update_message(user_profile, message, subject, propagate_mode, content, rendered_content)
|
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 django.core.handlers.base import BaseHandler
|
||||||
from zerver.models import get_user_profile_by_email, \
|
from zerver.models import get_user_profile_by_email, \
|
||||||
get_user_profile_by_id, get_prereg_user_by_email, get_client, \
|
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.context_managers import lockfile
|
||||||
from zerver.lib.queue import SimpleQueueClient, queue_json_publish
|
from zerver.lib.queue import SimpleQueueClient, queue_json_publish
|
||||||
from zerver.lib.timestamp import timestamp_to_datetime
|
from zerver.lib.timestamp import timestamp_to_datetime
|
||||||
@@ -405,10 +405,15 @@ class FetchLinksEmbedData(QueueProcessingWorker):
|
|||||||
ums = UserMessage.objects.filter(
|
ums = UserMessage.objects.filter(
|
||||||
message=message.id).select_related("user_profile")
|
message=message.id).select_related("user_profile")
|
||||||
message_users = {um.user_profile for um in ums}
|
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.
|
# If rendering fails, the called code will raise a JsonableError.
|
||||||
rendered_content = render_incoming_message(
|
rendered_content = render_incoming_message(
|
||||||
message,
|
message,
|
||||||
content=message.content,
|
message.content,
|
||||||
message_users=message_users)
|
message_users,
|
||||||
|
realm)
|
||||||
do_update_embedded_data(
|
do_update_embedded_data(
|
||||||
message.sender, message, message.content, rendered_content)
|
message.sender, message, message.content, rendered_content)
|
||||||
|
|||||||
Reference in New Issue
Block a user