diff options
author | Joram Wilander <jwawilander@gmail.com> | 2016-06-02 18:39:23 -0400 |
---|---|---|
committer | enahum <nahumhbl@gmail.com> | 2016-06-02 19:39:23 -0300 |
commit | 8165f5d91fab1730fcef4832e4bfbe0323d911e0 (patch) | |
tree | efbece2f089e98ca64d32f05bc99e18e89545b0d /api/command_invite_people.go | |
parent | 3386c58d7c53131f0aa435abaf4cbb521d2f6049 (diff) | |
download | chat-8165f5d91fab1730fcef4832e4bfbe0323d911e0.tar.gz chat-8165f5d91fab1730fcef4832e4bfbe0323d911e0.tar.bz2 chat-8165f5d91fab1730fcef4832e4bfbe0323d911e0.zip |
PLT-3131 Add slash command for sending email invites (#3218)
* Add slash command for sending email invites
* Add response for empty message and trim commas
* Check for @ in email addresses before sending
* Update invite people error message
Diffstat (limited to 'api/command_invite_people.go')
-rw-r--r-- | api/command_invite_people.go | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/api/command_invite_people.go b/api/command_invite_people.go new file mode 100644 index 000000000..4aa1d82f8 --- /dev/null +++ b/api/command_invite_people.go @@ -0,0 +1,78 @@ +// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package api + +import ( + "strings" + + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" +) + +type InvitePeopleProvider struct { +} + +const ( + CMD_INVITE_PEOPLE = "invite_people" +) + +func init() { + RegisterCommandProvider(&InvitePeopleProvider{}) +} + +func (me *InvitePeopleProvider) GetTrigger() string { + return CMD_INVITE_PEOPLE +} + +func (me *InvitePeopleProvider) GetCommand(c *Context) *model.Command { + return &model.Command{ + Trigger: CMD_INVITE_PEOPLE, + AutoComplete: true, + AutoCompleteDesc: c.T("api.command.invite_people.desc"), + AutoCompleteHint: c.T("api.command.invite_people.hint"), + DisplayName: c.T("api.command.invite_people.name"), + } +} + +func (me *InvitePeopleProvider) DoCommand(c *Context, channelId string, message string) *model.CommandResponse { + if !utils.Cfg.EmailSettings.SendEmailNotifications { + return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, Text: c.T("api.command.invite_people.email_off")} + } + + tchan := Srv.Store.Team().Get(c.TeamId) + uchan := Srv.Store.User().Get(c.Session.UserId) + + emailList := strings.Fields(message) + + for i := len(emailList) - 1; i >= 0; i-- { + emailList[i] = strings.Trim(emailList[i], ",") + if !strings.Contains(emailList[i], "@") { + emailList = append(emailList[:i], emailList[i+1:]...) + } + } + + if len(emailList) == 0 { + return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, Text: c.T("api.command.invite_people.no_email")} + } + + var team *model.Team + if result := <-tchan; result.Err != nil { + c.Err = result.Err + return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, Text: c.T("api.command.invite_people.fail")} + } else { + team = result.Data.(*model.Team) + } + + var user *model.User + if result := <-uchan; result.Err != nil { + c.Err = result.Err + return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, Text: c.T("api.command.invite_people.fail")} + } else { + user = result.Data.(*model.User) + } + + go InviteMembers(c, team, user, emailList) + + return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, Text: c.T("api.command.invite_people.sent")} +} |