mirror of
https://github.com/zulip/zulip.git
synced 2026-06-21 21:32:29 +08:00
default stream: Allows admins to remove any default stream.
This fixes a bug where administrators couldn't remove private unsubscribed streams from the "default streams" list, because access_stream_by_name didn't give them access to the stream object.
This commit is contained in:
parent
c41c82aae0
commit
6e136be975
@ -102,14 +102,16 @@ def check_stream_name_available(realm: Realm, name: str) -> None:
|
||||
pass
|
||||
|
||||
def access_stream_by_name(user_profile: UserProfile,
|
||||
stream_name: str) -> Tuple[Stream, Recipient, Optional[Subscription]]:
|
||||
stream_name: str,
|
||||
allow_realm_admin: bool=False) -> Tuple[Stream, Recipient, Optional[Subscription]]:
|
||||
error = _("Invalid stream name '%s'" % (stream_name,))
|
||||
try:
|
||||
stream = get_realm_stream(stream_name, user_profile.realm_id)
|
||||
except Stream.DoesNotExist:
|
||||
raise JsonableError(error)
|
||||
|
||||
(recipient, sub) = access_stream_common(user_profile, stream, error)
|
||||
(recipient, sub) = access_stream_common(user_profile, stream, error,
|
||||
allow_realm_admin=allow_realm_admin)
|
||||
return (stream, recipient, sub)
|
||||
|
||||
def access_stream_for_unmute_topic(user_profile: UserProfile, stream_name: str, error: str) -> Stream:
|
||||
|
||||
@ -1039,6 +1039,24 @@ class DefaultStreamTest(ZulipTestCase):
|
||||
self.assert_json_success(result)
|
||||
self.assertFalse(stream_name in self.get_default_stream_names(user_profile.realm))
|
||||
|
||||
# Test admin can't add unsubscribed private stream
|
||||
stream_name = "private_stream"
|
||||
self.make_stream(stream_name, invite_only=True)
|
||||
self.subscribe(self.example_user('iago'), stream_name)
|
||||
result = self.client_post('/json/default_streams', dict(stream_name=stream_name))
|
||||
self.assert_json_error(result, "Invalid stream name '%s'" % (stream_name))
|
||||
|
||||
self.subscribe(user_profile, stream_name)
|
||||
result = self.client_post('/json/default_streams', dict(stream_name=stream_name))
|
||||
self.assert_json_success(result)
|
||||
self.assertTrue(stream_name in self.get_default_stream_names(user_profile.realm))
|
||||
|
||||
# Test admin can remove unsubscribed private stream
|
||||
self.unsubscribe(user_profile, stream_name)
|
||||
result = self.client_delete('/json/default_streams', dict(stream_name=stream_name))
|
||||
self.assert_json_success(result)
|
||||
self.assertFalse(stream_name in self.get_default_stream_names(user_profile.realm))
|
||||
|
||||
class DefaultStreamGroupTest(ZulipTestCase):
|
||||
def test_create_update_and_remove_default_stream_group(self) -> None:
|
||||
realm = get_realm("zulip")
|
||||
|
||||
@ -136,7 +136,8 @@ def remove_default_stream_group(request: HttpRequest, user_profile: UserProfile,
|
||||
def remove_default_stream(request: HttpRequest,
|
||||
user_profile: UserProfile,
|
||||
stream_name: str=REQ()) -> HttpResponse:
|
||||
(stream, recipient, sub) = access_stream_by_name(user_profile, stream_name)
|
||||
(stream, recipient, sub) = access_stream_by_name(user_profile, stream_name,
|
||||
allow_realm_admin=True)
|
||||
do_remove_default_stream(stream)
|
||||
return json_success()
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user