mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 05:23:35 +00:00
messages: Add a server-level setting to control private stream history.
We don't indend for this server-level setting to exist in the long term; the purpose of this is just to make it easy to test this code path for development purposes. This implements much of the Message side part of #2745.
This commit is contained in:
@@ -147,7 +147,19 @@ def can_access_stream_history_by_name(user_profile: UserProfile, stream_name: Te
|
|||||||
stream = get_stream(stream_name, user_profile.realm)
|
stream = get_stream(stream_name, user_profile.realm)
|
||||||
except Stream.DoesNotExist:
|
except Stream.DoesNotExist:
|
||||||
return False
|
return False
|
||||||
return stream.is_public()
|
|
||||||
|
if stream.is_history_realm_public():
|
||||||
|
return True
|
||||||
|
|
||||||
|
if stream.is_history_public_to_subscribers():
|
||||||
|
# In this case, we check if the user is subscribed.
|
||||||
|
error = _("Invalid stream name '%s'" % (stream_name,))
|
||||||
|
try:
|
||||||
|
(recipient, sub) = access_stream_common(user_profile, stream, error)
|
||||||
|
except JsonableError:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def filter_stream_authorization(user_profile: UserProfile,
|
def filter_stream_authorization(user_profile: UserProfile,
|
||||||
streams: Iterable[Stream]) -> Tuple[List[Stream], List[Stream]]:
|
streams: Iterable[Stream]) -> Tuple[List[Stream], List[Stream]]:
|
||||||
|
|||||||
@@ -954,6 +954,14 @@ class Stream(models.Model):
|
|||||||
# All streams are private in Zephyr mirroring realms.
|
# All streams are private in Zephyr mirroring realms.
|
||||||
return not self.invite_only and not self.is_in_zephyr_realm
|
return not self.invite_only and not self.is_in_zephyr_realm
|
||||||
|
|
||||||
|
def is_history_realm_public(self) -> bool:
|
||||||
|
return self.is_public()
|
||||||
|
|
||||||
|
def is_history_public_to_subscribers(self) -> bool:
|
||||||
|
if settings.PRIVATE_STREAM_HISTORY_FOR_SUBSCRIBERS:
|
||||||
|
return True
|
||||||
|
return self.is_public()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ("name", "realm")
|
unique_together = ("name", "realm")
|
||||||
|
|
||||||
|
|||||||
@@ -375,11 +375,19 @@ class IncludeHistoryTest(ZulipTestCase):
|
|||||||
self.assertFalse(ok_to_include_history(narrow, user_profile))
|
self.assertFalse(ok_to_include_history(narrow, user_profile))
|
||||||
|
|
||||||
# Definitely forbid seeing history on private streams.
|
# Definitely forbid seeing history on private streams.
|
||||||
|
self.make_stream('private_stream', realm=user_profile.realm, invite_only=True)
|
||||||
|
subscribed_user_profile = self.example_user("cordelia")
|
||||||
|
self.subscribe(subscribed_user_profile, 'private_stream')
|
||||||
narrow = [
|
narrow = [
|
||||||
dict(operator='stream', operand='private_stream'),
|
dict(operator='stream', operand='private_stream'),
|
||||||
]
|
]
|
||||||
self.assertFalse(ok_to_include_history(narrow, user_profile))
|
self.assertFalse(ok_to_include_history(narrow, user_profile))
|
||||||
|
|
||||||
|
with self.settings(PRIVATE_STREAM_HISTORY_FOR_SUBSCRIBERS=True):
|
||||||
|
# Verify that with this setting, subscribed users can access history.
|
||||||
|
self.assertFalse(ok_to_include_history(narrow, user_profile))
|
||||||
|
self.assertTrue(ok_to_include_history(narrow, subscribed_user_profile))
|
||||||
|
|
||||||
# History doesn't apply to PMs.
|
# History doesn't apply to PMs.
|
||||||
narrow = [
|
narrow = [
|
||||||
dict(operator='is', operand='private'),
|
dict(operator='is', operand='private'),
|
||||||
|
|||||||
@@ -311,6 +311,12 @@ DEFAULT_SETTINGS.update({
|
|||||||
'MAX_ICON_FILE_SIZE': 5,
|
'MAX_ICON_FILE_SIZE': 5,
|
||||||
'MAX_EMOJI_FILE_SIZE': 5,
|
'MAX_EMOJI_FILE_SIZE': 5,
|
||||||
|
|
||||||
|
# TODO: This server setting is a hack to help with folks who are
|
||||||
|
# finding our private stream security model painful. Future work
|
||||||
|
# will migrate this to be a property of Stream or maybe Realm and
|
||||||
|
# this setting will be deprecated.
|
||||||
|
'PRIVATE_STREAM_HISTORY_FOR_SUBSCRIBERS': False,
|
||||||
|
|
||||||
# Limits to help prevent spam, in particular by sending invitations.
|
# Limits to help prevent spam, in particular by sending invitations.
|
||||||
#
|
#
|
||||||
# A non-admin user who's joined an open realm this recently can't invite at all.
|
# A non-admin user who's joined an open realm this recently can't invite at all.
|
||||||
|
|||||||
Reference in New Issue
Block a user