MM-21336: Improve channel rename restrictions (#13441)

* MM-21336: Improve channel rename restrictions

Non-direct channels should not have __ in them.

* Fix order of i18n extraction

* Incorporate review comments

Use a more relaxed check by actually checking for valid userIds.

* Improve error message
Этот коммит содержится в:
Agniva De Sarker
2020-01-03 20:56:32 +05:30
коммит произвёл GitHub
родитель 69ab1ea1e4
Коммит e826055519
3 изменённых файлов: 27 добавлений и 2 удалений

Просмотреть файл

@@ -508,7 +508,16 @@ func (a *App) GetGroupChannel(userIds []string) (*model.Channel, *model.AppError
return channel, nil return channel, nil
} }
// UpdateChannel updates a given channel by its Id. It also publishes the CHANNEL_UPDATED event.
func (a *App) UpdateChannel(channel *model.Channel) (*model.Channel, *model.AppError) { func (a *App) UpdateChannel(channel *model.Channel) (*model.Channel, *model.AppError) {
userIds := strings.Split(channel.Name, "__")
if channel.Type != model.CHANNEL_DIRECT &&
len(userIds) == 2 &&
model.IsValidId(userIds[0]) &&
model.IsValidId(userIds[1]) {
return nil, model.NewAppError("UpdateChannel", "api.channel.update_channel.invalid_character.app_error", nil, "", http.StatusBadRequest)
}
_, err := a.Srv.Store.Channel().Update(channel) _, err := a.Srv.Store.Channel().Update(channel)
if err != nil { if err != nil {
return nil, err return nil, err

Просмотреть файл

@@ -743,6 +743,7 @@ func TestRenameChannel(t *testing.T) {
Name string Name string
Channel *model.Channel Channel *model.Channel
ExpectError bool ExpectError bool
ChannelName string
ExpectedName string ExpectedName string
ExpectedDisplayName string ExpectedDisplayName string
}{ }{
@@ -751,19 +752,30 @@ func TestRenameChannel(t *testing.T) {
th.createChannel(th.BasicTeam, model.CHANNEL_OPEN), th.createChannel(th.BasicTeam, model.CHANNEL_OPEN),
false, false,
"newchannelname", "newchannelname",
"newchannelname",
"New Display Name", "New Display Name",
}, },
{
"Fail on rename open channel with bad name",
th.createChannel(th.BasicTeam, model.CHANNEL_OPEN),
true,
"6zii9a9g6pruzj451x3esok54h__wr4j4g8zqtnhmkw771pfpynqwo",
"",
"",
},
{ {
"Fail on rename direct message channel", "Fail on rename direct message channel",
th.CreateDmChannel(th.BasicUser2), th.CreateDmChannel(th.BasicUser2),
true, true,
"newchannelname",
"", "",
"", "",
}, },
{ {
"Fail on rename direct message channel", "Fail on rename group message channel",
th.CreateGroupChannel(th.BasicUser2, th.CreateUser()), th.CreateGroupChannel(th.BasicUser2, th.CreateUser()),
true, true,
"newchannelname",
"", "",
"", "",
}, },
@@ -771,7 +783,7 @@ func TestRenameChannel(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.Name, func(t *testing.T) { t.Run(tc.Name, func(t *testing.T) {
channel, err := th.App.RenameChannel(tc.Channel, "newchannelname", "New Display Name") channel, err := th.App.RenameChannel(tc.Channel, tc.ChannelName, "New Display Name")
if tc.ExpectError { if tc.ExpectError {
assert.NotNil(t, err) assert.NotNil(t, err)
} else { } else {

Просмотреть файл

@@ -371,6 +371,10 @@
"id": "api.channel.update_channel.deleted.app_error", "id": "api.channel.update_channel.deleted.app_error",
"translation": "The channel has been archived or deleted" "translation": "The channel has been archived or deleted"
}, },
{
"id": "api.channel.update_channel.invalid_character.app_error",
"translation": "Invalid channel name. User ids are not permitted in channel name for non-direct message channels."
},
{ {
"id": "api.channel.update_channel.tried.app_error", "id": "api.channel.update_channel.tried.app_error",
"translation": "Tried to perform an invalid update of the default channel {{.Channel}}" "translation": "Tried to perform an invalid update of the default channel {{.Channel}}"