github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/app/command_channel_rename.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 goi18n "github.com/mattermost/go-i18n/i18n" 8 9 "github.com/mattermost/mattermost-server/v5/model" 10 ) 11 12 type RenameProvider struct { 13 } 14 15 const ( 16 CMD_RENAME = "rename" 17 ) 18 19 func init() { 20 RegisterCommandProvider(&RenameProvider{}) 21 } 22 23 func (me *RenameProvider) GetTrigger() string { 24 return CMD_RENAME 25 } 26 27 func (me *RenameProvider) GetCommand(a *App, T goi18n.TranslateFunc) *model.Command { 28 renameAutocompleteData := model.NewAutocompleteData(CMD_RENAME, T("api.command_channel_rename.hint"), T("api.command_channel_rename.desc")) 29 renameAutocompleteData.AddTextArgument(T("api.command_channel_rename.hint"), "[text]", "") 30 return &model.Command{ 31 Trigger: CMD_RENAME, 32 AutoComplete: true, 33 AutoCompleteDesc: T("api.command_channel_rename.desc"), 34 AutoCompleteHint: T("api.command_channel_rename.hint"), 35 DisplayName: T("api.command_channel_rename.name"), 36 AutocompleteData: renameAutocompleteData, 37 } 38 } 39 40 func (me *RenameProvider) DoCommand(a *App, args *model.CommandArgs, message string) *model.CommandResponse { 41 channel, err := a.GetChannel(args.ChannelId) 42 if err != nil { 43 return &model.CommandResponse{ 44 Text: args.T("api.command_channel_rename.channel.app_error"), 45 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 46 } 47 } 48 49 switch channel.Type { 50 case model.CHANNEL_OPEN: 51 if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) { 52 return &model.CommandResponse{ 53 Text: args.T("api.command_channel_rename.permission.app_error"), 54 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 55 } 56 } 57 case model.CHANNEL_PRIVATE: 58 if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES) { 59 return &model.CommandResponse{ 60 Text: args.T("api.command_channel_rename.permission.app_error"), 61 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 62 } 63 } 64 default: 65 return &model.CommandResponse{Text: args.T("api.command_channel_rename.direct_group.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} 66 } 67 68 if len(message) == 0 { 69 return &model.CommandResponse{ 70 Text: args.T("api.command_channel_rename.message.app_error"), 71 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 72 } 73 } else if len(message) > model.CHANNEL_NAME_MAX_LENGTH { 74 return &model.CommandResponse{ 75 Text: args.T("api.command_channel_rename.too_long.app_error", map[string]interface{}{ 76 "Length": model.CHANNEL_NAME_MAX_LENGTH, 77 }), 78 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 79 } 80 } else if len(message) < model.CHANNEL_NAME_MIN_LENGTH { 81 return &model.CommandResponse{ 82 Text: args.T("api.command_channel_rename.too_short.app_error", map[string]interface{}{ 83 "Length": model.CHANNEL_NAME_MIN_LENGTH, 84 }), 85 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 86 } 87 } 88 89 patch := &model.ChannelPatch{ 90 DisplayName: new(string), 91 } 92 *patch.DisplayName = message 93 94 _, err = a.PatchChannel(channel, patch, args.UserId) 95 if err != nil { 96 return &model.CommandResponse{ 97 Text: args.T("api.command_channel_rename.update_channel.app_error"), 98 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 99 } 100 } 101 102 return &model.CommandResponse{} 103 }