Implement POST /teams/{team_id}/invite/email for apiV4 (#5944)

This commit is contained in:
Carlos Tadeu Panato Junior
2017-04-04 03:32:09 +02:00
committed by Joram Wilander
parent d5f56e678a
commit 9dce502814
3 changed files with 91 additions and 0 deletions

View File

@@ -48,6 +48,7 @@ func InitTeam() {
BaseRoutes.TeamMember.Handle("/roles", ApiSessionRequired(updateTeamMemberRoles)).Methods("PUT")
BaseRoutes.Team.Handle("/import", ApiSessionRequired(importTeam)).Methods("POST")
BaseRoutes.Team.Handle("/invite/email", ApiSessionRequired(inviteUsersToTeam)).Methods("POST")
}
func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
@@ -648,3 +649,35 @@ func importTeam(c *Context, w http.ResponseWriter, r *http.Request) {
}
io.Copy(w, bytes.NewReader(log.Bytes()))
}
func inviteUsersToTeam(c *Context, w http.ResponseWriter, r *http.Request) {
c.RequireTeamId()
if c.Err != nil {
return
}
if !app.SessionHasPermissionToTeam(c.Session, c.Params.TeamId, model.PERMISSION_INVITE_USER) {
c.SetPermissionError(model.PERMISSION_INVITE_USER)
return
}
if !app.SessionHasPermissionToTeam(c.Session, c.Params.TeamId, model.PERMISSION_ADD_USER_TO_TEAM) {
c.SetPermissionError(model.PERMISSION_INVITE_USER)
return
}
emailList := model.ArrayFromJson(r.Body)
if len(emailList) == 0 {
c.SetInvalidParam("user_email")
return
}
err := app.InviteNewUsersToTeam(emailList, c.Params.TeamId, c.Session.UserId, utils.GetSiteURL())
if err != nil {
c.Err = err
return
}
ReturnStatusOK(w)
}

View File

@@ -1372,3 +1372,51 @@ func TestImportTeam(t *testing.T) {
CheckForbiddenStatus(t, resp)
})
}
func TestInviteUsersToTeam(t *testing.T) {
th := Setup().InitBasic().InitSystemAdmin()
defer TearDown()
user1 := GenerateTestEmail()
user2 := GenerateTestEmail()
emailList := []string{user1, user2}
//Delete all the messages before check the sample email
utils.DeleteMailBox(user1)
utils.DeleteMailBox(user2)
okMsg, resp := th.SystemAdminClient.InviteUsersToTeam(th.BasicTeam.Id, emailList)
CheckNoError(t, resp)
if okMsg != true {
t.Fatal("should return true")
}
expectedSubject := "[Mattermost] " + th.SystemAdminUser.GetDisplayName() + " invited you to join " + th.BasicTeam.DisplayName + " Team"
//Check if the email was send to the rigth email address
for _, email := range emailList {
var resultsMailbox utils.JSONMessageHeaderInbucket
err := utils.RetryInbucket(5, func() error {
var err error
resultsMailbox, err = utils.GetMailBox(email)
return err
})
if err != nil {
t.Log(err)
t.Log("No email was received, maybe due load on the server. Disabling this verification")
}
if err == nil && len(resultsMailbox) > 0 {
if !strings.ContainsAny(resultsMailbox[0].To[0], email) {
t.Fatal("Wrong To recipient")
} else {
if resultsEmail, err := utils.GetMessageFromMailbox(email, resultsMailbox[0].ID); err == nil {
if resultsEmail.Subject != expectedSubject {
t.Log(resultsEmail.Subject)
t.Log(expectedSubject)
t.Fatal("Wrong Subject")
}
}
}
}
}
}

View File

@@ -1057,6 +1057,16 @@ func (c *Client4) ImportTeam(data []byte, filesize int, importFrom, filename, te
return c.DoUploadImportTeam(c.GetTeamImportRoute(teamId), body.Bytes(), writer.FormDataContentType())
}
// InviteUsersToTeam invite users by email to the team.
func (c *Client4) InviteUsersToTeam(teamId string, userEmails []string) (bool, *Response) {
if r, err := c.DoApiPost(c.GetTeamRoute(teamId)+"/invite/email", ArrayToJson(userEmails)); err != nil {
return false, &Response{StatusCode: r.StatusCode, Error: err}
} else {
defer closeBody(r)
return CheckStatusOK(r), BuildResponse(r)
}
}
// Channel Section
// CreateChannel creates a channel based on the provided channel struct.