github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/app/slashcommands/command_channel_header.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package slashcommands 5 6 import ( 7 goi18n "github.com/mattermost/go-i18n/i18n" 8 9 "github.com/mattermost/mattermost-server/v5/app" 10 "github.com/mattermost/mattermost-server/v5/model" 11 ) 12 13 type HeaderProvider struct { 14 } 15 16 const ( 17 CmdHeader = "header" 18 ) 19 20 func init() { 21 app.RegisterCommandProvider(&HeaderProvider{}) 22 } 23 24 func (*HeaderProvider) GetTrigger() string { 25 return CmdHeader 26 } 27 28 func (*HeaderProvider) GetCommand(a *app.App, T goi18n.TranslateFunc) *model.Command { 29 return &model.Command{ 30 Trigger: CmdHeader, 31 AutoComplete: true, 32 AutoCompleteDesc: T("api.command_channel_header.desc"), 33 AutoCompleteHint: T("api.command_channel_header.hint"), 34 DisplayName: T("api.command_channel_header.name"), 35 } 36 } 37 38 func (*HeaderProvider) DoCommand(a *app.App, args *model.CommandArgs, message string) *model.CommandResponse { 39 channel, err := a.GetChannel(args.ChannelId) 40 if err != nil { 41 return &model.CommandResponse{ 42 Text: args.T("api.command_channel_header.channel.app_error"), 43 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 44 } 45 } 46 47 switch channel.Type { 48 case model.CHANNEL_OPEN: 49 if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES) { 50 return &model.CommandResponse{ 51 Text: args.T("api.command_channel_header.permission.app_error"), 52 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 53 } 54 } 55 56 case model.CHANNEL_PRIVATE: 57 if !a.HasPermissionToChannel(args.UserId, args.ChannelId, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES) { 58 return &model.CommandResponse{ 59 Text: args.T("api.command_channel_header.permission.app_error"), 60 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 61 } 62 } 63 64 case model.CHANNEL_GROUP, model.CHANNEL_DIRECT: 65 // Modifying the header is not linked to any specific permission for group/dm channels, so just check for membership. 66 var channelMember *model.ChannelMember 67 channelMember, err = a.GetChannelMember(args.ChannelId, args.UserId) 68 if err != nil || channelMember == nil { 69 return &model.CommandResponse{ 70 Text: args.T("api.command_channel_header.permission.app_error"), 71 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 72 } 73 } 74 75 default: 76 return &model.CommandResponse{ 77 Text: args.T("api.command_channel_header.permission.app_error"), 78 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 79 } 80 } 81 82 if message == "" { 83 return &model.CommandResponse{ 84 Text: args.T("api.command_channel_header.message.app_error"), 85 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 86 } 87 } 88 89 patch := &model.ChannelPatch{ 90 Header: new(string), 91 } 92 *patch.Header = 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_header.update_channel.app_error"), 98 ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, 99 } 100 } 101 102 return &model.CommandResponse{} 103 }