guests: Block guest user access to default streams.

Guest users will just get an empty list of default streams; we also
hide the "Default streams" organization view from the guest users UI.

This is for consistency with not providing guest users the full list
of streams in an organization.
This commit is contained in:
Tim Abbott
2019-02-28 16:26:57 -08:00
parent 1ce0e8256b
commit 62dc6dda49
4 changed files with 38 additions and 6 deletions

View File

@@ -111,6 +111,7 @@
<i class="locked fa fa-lock" title="{{ _('Only organization administrators can edit these settings.') }}"></i> <i class="locked fa fa-lock" title="{{ _('Only organization administrators can edit these settings.') }}"></i>
{% endif %} {% endif %}
</li> </li>
{% if not is_guest %}
<li tabindex="0" data-section="default-streams-list"> <li tabindex="0" data-section="default-streams-list">
<i class="icon fa fa-exchange" aria-hidden="true"></i> <i class="icon fa fa-exchange" aria-hidden="true"></i>
<div class="text">{{ _('Default streams') }}</div> <div class="text">{{ _('Default streams') }}</div>
@@ -118,6 +119,7 @@
<i class="locked fa fa-lock" title="{{ _('Only organization administrators can edit these settings.') }}"></i> <i class="locked fa fa-lock" title="{{ _('Only organization administrators can edit these settings.') }}"></i>
{% endif %} {% endif %}
</li> </li>
{% endif %}
<li tabindex="0" data-section="filter-settings"> <li tabindex="0" data-section="filter-settings">
<i class="icon fa fa-font" aria-hidden="true"></i> <i class="icon fa fa-font" aria-hidden="true"></i>
<div class="text">{{ _('Linkifiers') }}</div> <div class="text">{{ _('Linkifiers') }}</div>

View File

@@ -3650,14 +3650,14 @@ def notify_default_streams(realm: Realm) -> None:
type="default_streams", type="default_streams",
default_streams=streams_to_dicts_sorted(get_default_streams_for_realm(realm.id)) default_streams=streams_to_dicts_sorted(get_default_streams_for_realm(realm.id))
) )
send_event(realm, event, active_user_ids(realm.id)) send_event(realm, event, active_non_guest_user_ids(realm.id))
def notify_default_stream_groups(realm: Realm) -> None: def notify_default_stream_groups(realm: Realm) -> None:
event = dict( event = dict(
type="default_stream_groups", type="default_stream_groups",
default_stream_groups=default_stream_groups_to_dicts_sorted(get_default_stream_groups(realm)) default_stream_groups=default_stream_groups_to_dicts_sorted(get_default_stream_groups(realm))
) )
send_event(realm, event, active_user_ids(realm.id)) send_event(realm, event, active_non_guest_user_ids(realm.id))
def do_add_default_stream(stream: Stream) -> None: def do_add_default_stream(stream: Stream) -> None:
realm_id = stream.realm_id realm_id = stream.realm_id

View File

@@ -289,11 +289,17 @@ def fetch_initial_state_data(user_profile: UserProfile,
state['stream_name_max_length'] = Stream.MAX_NAME_LENGTH state['stream_name_max_length'] = Stream.MAX_NAME_LENGTH
state['stream_description_max_length'] = Stream.MAX_DESCRIPTION_LENGTH state['stream_description_max_length'] = Stream.MAX_DESCRIPTION_LENGTH
if want('default_streams'): if want('default_streams'):
state['realm_default_streams'] = streams_to_dicts_sorted( if user_profile.is_guest:
get_default_streams_for_realm(realm.id)) state['realm_default_streams'] = []
else:
state['realm_default_streams'] = streams_to_dicts_sorted(
get_default_streams_for_realm(realm.id))
if want('default_stream_groups'): if want('default_stream_groups'):
state['realm_default_stream_groups'] = default_stream_groups_to_dicts_sorted( if user_profile.is_guest:
get_default_stream_groups(realm)) state['realm_default_stream_groups'] = []
else:
state['realm_default_stream_groups'] = default_stream_groups_to_dicts_sorted(
get_default_stream_groups(realm))
if want('stop_words'): if want('stop_words'):
state['stop_words'] = read_stop_words() state['stop_words'] = read_stop_words()

View File

@@ -44,6 +44,7 @@ from zerver.lib.actions import (
do_change_full_name, do_change_full_name,
do_change_icon_source, do_change_icon_source,
do_change_is_admin, do_change_is_admin,
do_change_is_guest,
do_change_notification_settings, do_change_notification_settings,
do_change_realm_domain, do_change_realm_domain,
do_change_stream_description, do_change_stream_description,
@@ -1422,6 +1423,21 @@ class EventsRegisterTest(ZulipTestCase):
error = default_stream_groups_checker('events[0]', events[0]) error = default_stream_groups_checker('events[0]', events[0])
self.assert_on_error(error) self.assert_on_error(error)
def test_default_stream_group_events_guest(self) -> None:
streams = []
for stream_name in ["Scotland", "Verona", "Denmark"]:
streams.append(get_stream(stream_name, self.user_profile.realm))
do_create_default_stream_group(self.user_profile.realm, "group1",
"This is group1", streams)
group = lookup_default_stream_groups(["group1"], self.user_profile.realm)[0]
do_change_is_guest(self.user_profile, True)
venice_stream = get_stream("Venice", self.user_profile.realm)
self.do_test(lambda: do_add_streams_to_default_stream_group(self.user_profile.realm,
group, [venice_stream]),
state_change_expected = False, num_events=0)
def test_default_streams_events(self) -> None: def test_default_streams_events(self) -> None:
default_streams_checker = self.check_events_dict([ default_streams_checker = self.check_events_dict([
('type', equals('default_streams')), ('type', equals('default_streams')),
@@ -1440,6 +1456,14 @@ class EventsRegisterTest(ZulipTestCase):
error = default_streams_checker('events[0]', events[0]) error = default_streams_checker('events[0]', events[0])
self.assert_on_error(error) self.assert_on_error(error)
def test_default_streams_events_guest(self) -> None:
do_change_is_guest(self.user_profile, True)
stream = get_stream("Scotland", self.user_profile.realm)
self.do_test(lambda: do_add_default_stream(stream),
state_change_expected = False, num_events=0)
self.do_test(lambda: do_remove_default_stream(stream),
state_change_expected = False, num_events=0)
def test_muted_topics_events(self) -> None: def test_muted_topics_events(self) -> None:
muted_topics_checker = self.check_events_dict([ muted_topics_checker = self.check_events_dict([
('type', equals('muted_topics')), ('type', equals('muted_topics')),