mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 14:35:27 +00:00
messages: Modify access_message for is_history_public_to_subscribers.
This completes the Message side of #2745.
This commit is contained in:
@@ -482,17 +482,28 @@ def access_message(user_profile: UserProfile, message_id: int) -> Tuple[Message,
|
|||||||
# You can't access private messages you didn't receive
|
# You can't access private messages you didn't receive
|
||||||
raise JsonableError(_("Invalid message(s)"))
|
raise JsonableError(_("Invalid message(s)"))
|
||||||
stream = Stream.objects.get(id=message.recipient.type_id)
|
stream = Stream.objects.get(id=message.recipient.type_id)
|
||||||
if not stream.is_public():
|
|
||||||
# You can't access messages sent to invite-only streams
|
|
||||||
# that you didn't receive
|
|
||||||
raise JsonableError(_("Invalid message(s)"))
|
|
||||||
# So the message is to a public stream
|
|
||||||
if stream.realm != user_profile.realm:
|
if stream.realm != user_profile.realm:
|
||||||
# You can't access public stream messages in other realms
|
# You can't access public stream messages in other realms
|
||||||
raise JsonableError(_("Invalid message(s)"))
|
raise JsonableError(_("Invalid message(s)"))
|
||||||
|
|
||||||
# Otherwise, the message must have been sent to a public
|
if not stream.is_public():
|
||||||
# stream in your realm, so return the message, user_message pair
|
if not stream.is_history_public_to_subscribers():
|
||||||
|
# You can't access messages sent to invite-only streams
|
||||||
|
# that you didn't receive
|
||||||
|
raise JsonableError(_("Invalid message(s)"))
|
||||||
|
|
||||||
|
# This stream is an invite-only stream where message
|
||||||
|
# history is available to subscribers. So we check if
|
||||||
|
# you're subscribed.
|
||||||
|
if not Subscription.objects.filter(user_profile=user_profile, active=True,
|
||||||
|
recipient=message.recipient).exists():
|
||||||
|
raise JsonableError(_("Invalid message(s)"))
|
||||||
|
|
||||||
|
# You are subscribed, so let this fall through to the public stream case.
|
||||||
|
else:
|
||||||
|
# Otherwise, the message was sent to a public stream in
|
||||||
|
# your realm, so return the message, user_message pair
|
||||||
|
pass
|
||||||
return (message, user_message)
|
return (message, user_message)
|
||||||
|
|
||||||
def render_markdown(message: Message,
|
def render_markdown(message: Message,
|
||||||
|
|||||||
@@ -2262,6 +2262,7 @@ class MirroredMessageUsersTest(ZulipTestCase):
|
|||||||
self.assertTrue(bob.is_mirror_dummy)
|
self.assertTrue(bob.is_mirror_dummy)
|
||||||
|
|
||||||
class StarTests(ZulipTestCase):
|
class StarTests(ZulipTestCase):
|
||||||
|
"""This is also the main test for access_message"""
|
||||||
|
|
||||||
def change_star(self, messages: List[int], add: bool=True, **kwargs: Any) -> HttpResponse:
|
def change_star(self, messages: List[int], add: bool=True, **kwargs: Any) -> HttpResponse:
|
||||||
return self.client_post("/json/messages/flags",
|
return self.client_post("/json/messages/flags",
|
||||||
@@ -2405,6 +2406,18 @@ class StarTests(ZulipTestCase):
|
|||||||
result = self.change_star(message_ids)
|
result = self.change_star(message_ids)
|
||||||
self.assert_json_error(result, 'Invalid message(s)')
|
self.assert_json_error(result, 'Invalid message(s)')
|
||||||
|
|
||||||
|
with self.settings(PRIVATE_STREAM_HISTORY_FOR_SUBSCRIBERS=True):
|
||||||
|
# With PRIVATE_STREAM_HISTORY_FOR_SUBSCRIBERS, you still
|
||||||
|
# can't see it if you didn't receive the message and are
|
||||||
|
# not subscribed.
|
||||||
|
result = self.change_star(message_ids)
|
||||||
|
self.assert_json_error(result, 'Invalid message(s)')
|
||||||
|
|
||||||
|
# But if you subscribe, then you can star the message
|
||||||
|
self.subscribe(self.example_user("cordelia"), stream_name)
|
||||||
|
result = self.change_star(message_ids)
|
||||||
|
self.assert_json_success(result)
|
||||||
|
|
||||||
def test_new_message(self) -> None:
|
def test_new_message(self) -> None:
|
||||||
"""
|
"""
|
||||||
New messages aren't starred.
|
New messages aren't starred.
|
||||||
|
|||||||
Reference in New Issue
Block a user