mirror of https://github.com/zulip/zulip.git
stream settings: Fix server error on long stream description.
Add backend validations to check stream description length.
This commit is contained in:
parent
976e61d687
commit
7e9ccead2e
|
@ -935,6 +935,7 @@ def generate_email_token_for_stream() -> str:
|
||||||
|
|
||||||
class Stream(models.Model):
|
class Stream(models.Model):
|
||||||
MAX_NAME_LENGTH = 60
|
MAX_NAME_LENGTH = 60
|
||||||
|
MAX_DESCRIPTION_LENGTH = 1024
|
||||||
name = models.CharField(max_length=MAX_NAME_LENGTH, db_index=True) # type: Text
|
name = models.CharField(max_length=MAX_NAME_LENGTH, db_index=True) # type: Text
|
||||||
realm = models.ForeignKey(Realm, db_index=True, on_delete=CASCADE) # type: Realm
|
realm = models.ForeignKey(Realm, db_index=True, on_delete=CASCADE) # type: Realm
|
||||||
invite_only = models.NullBooleanField(default=False) # type: Optional[bool]
|
invite_only = models.NullBooleanField(default=False) # type: Optional[bool]
|
||||||
|
@ -955,7 +956,7 @@ class Stream(models.Model):
|
||||||
# have plenty of room for the token.
|
# have plenty of room for the token.
|
||||||
email_token = models.CharField(
|
email_token = models.CharField(
|
||||||
max_length=32, default=generate_email_token_for_stream) # type: str
|
max_length=32, default=generate_email_token_for_stream) # type: str
|
||||||
description = models.CharField(max_length=1024, default=u'') # type: Text
|
description = models.CharField(max_length=MAX_DESCRIPTION_LENGTH, default=u'') # type: Text
|
||||||
|
|
||||||
date_created = models.DateTimeField(default=timezone_now) # type: datetime.datetime
|
date_created = models.DateTimeField(default=timezone_now) # type: datetime.datetime
|
||||||
deactivated = models.BooleanField(default=False) # type: bool
|
deactivated = models.BooleanField(default=False) # type: bool
|
||||||
|
|
|
@ -610,12 +610,11 @@ class StreamAdminTest(ZulipTestCase):
|
||||||
self.assert_json_error(result, "Invalid stream id")
|
self.assert_json_error(result, "Invalid stream id")
|
||||||
|
|
||||||
def test_change_stream_description(self) -> None:
|
def test_change_stream_description(self) -> None:
|
||||||
user_profile = self.example_user('hamlet')
|
user_profile = self.example_user('iago')
|
||||||
email = user_profile.email
|
email = user_profile.email
|
||||||
self.login(email)
|
self.login(email)
|
||||||
realm = user_profile.realm
|
realm = user_profile.realm
|
||||||
self.subscribe(user_profile, 'stream_name1')
|
self.subscribe(user_profile, 'stream_name1')
|
||||||
do_change_is_admin(user_profile, True)
|
|
||||||
|
|
||||||
events = [] # type: List[Mapping[str, Any]]
|
events = [] # type: List[Mapping[str, Any]]
|
||||||
with tornado_redirected_to_list(events):
|
with tornado_redirected_to_list(events):
|
||||||
|
@ -644,6 +643,11 @@ class StreamAdminTest(ZulipTestCase):
|
||||||
|
|
||||||
self.assertEqual('Test description', stream.description)
|
self.assertEqual('Test description', stream.description)
|
||||||
|
|
||||||
|
result = self.client_patch('/json/streams/%d' % (stream_id,),
|
||||||
|
{'description': ujson.dumps('a' * 1025)})
|
||||||
|
self.assert_json_error(result, "description is too long (limit: %s characters)."
|
||||||
|
% (Stream.MAX_DESCRIPTION_LENGTH))
|
||||||
|
|
||||||
def test_change_stream_description_requires_realm_admin(self) -> None:
|
def test_change_stream_description_requires_realm_admin(self) -> None:
|
||||||
user_profile = self.example_user('hamlet')
|
user_profile = self.example_user('hamlet')
|
||||||
email = user_profile.email
|
email = user_profile.email
|
||||||
|
|
|
@ -27,7 +27,7 @@ from zerver.lib.streams import access_stream_by_id, access_stream_by_name, \
|
||||||
check_stream_name, check_stream_name_available, filter_stream_authorization, \
|
check_stream_name, check_stream_name_available, filter_stream_authorization, \
|
||||||
list_to_streams, access_stream_for_delete_or_update, access_default_stream_group_by_id
|
list_to_streams, access_stream_for_delete_or_update, access_default_stream_group_by_id
|
||||||
from zerver.lib.validator import check_string, check_int, check_list, check_dict, \
|
from zerver.lib.validator import check_string, check_int, check_list, check_dict, \
|
||||||
check_bool, check_variable_type
|
check_bool, check_variable_type, check_capped_string
|
||||||
from zerver.models import UserProfile, Stream, Realm, Subscription, \
|
from zerver.models import UserProfile, Stream, Realm, Subscription, \
|
||||||
Recipient, get_recipient, get_stream, \
|
Recipient, get_recipient, get_stream, \
|
||||||
get_system_bot, get_user
|
get_system_bot, get_user
|
||||||
|
@ -144,7 +144,8 @@ def remove_default_stream(request: HttpRequest,
|
||||||
def update_stream_backend(
|
def update_stream_backend(
|
||||||
request: HttpRequest, user_profile: UserProfile,
|
request: HttpRequest, user_profile: UserProfile,
|
||||||
stream_id: int,
|
stream_id: int,
|
||||||
description: Optional[str]=REQ(validator=check_string, default=None),
|
description: Optional[str]=REQ(validator=check_capped_string(
|
||||||
|
Stream.MAX_DESCRIPTION_LENGTH), default=None),
|
||||||
is_private: Optional[bool]=REQ(validator=check_bool, default=None),
|
is_private: Optional[bool]=REQ(validator=check_bool, default=None),
|
||||||
history_public_to_subscribers: Optional[bool]=REQ(validator=check_bool, default=None),
|
history_public_to_subscribers: Optional[bool]=REQ(validator=check_bool, default=None),
|
||||||
new_name: Optional[str]=REQ(validator=check_string, default=None),
|
new_name: Optional[str]=REQ(validator=check_string, default=None),
|
||||||
|
|
Loading…
Reference in New Issue