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