diff --git a/api4/team.go b/api4/team.go index 42499ba698..5fbf8a66b3 100644 --- a/api4/team.go +++ b/api4/team.go @@ -1200,8 +1200,15 @@ func inviteUsersToTeam(c *Context, w http.ResponseWriter, r *http.Request) { if graceful { cloudUserLimit := *c.App.Config().ExperimentalSettings.CloudUserLimit var invitesOverLimit []*model.EmailInviteWithError - if cloudUserLimit > 0 && c.IsSystemAdmin() { - emailList, invitesOverLimit, _ = c.App.GetErrorListForEmailsOverLimit(emailList, cloudUserLimit) + if c.App.Srv().License() != nil && *c.App.Srv().License().Features.Cloud && cloudUserLimit > 0 && c.IsSystemAdmin() { + subscription, subErr := c.App.Cloud().GetSubscription() + if subErr != nil { + c.Err = subErr + return + } + if subscription == nil || subscription.IsPaidTier != "true" { + emailList, invitesOverLimit, _ = c.App.GetErrorListForEmailsOverLimit(emailList, cloudUserLimit) + } } var invitesWithError []*model.EmailInviteWithError var err *model.AppError @@ -1279,7 +1286,30 @@ func inviteGuestsToChannels(c *Context, w http.ResponseWriter, r *http.Request) auditRec.AddMeta("channels", guestsInvite.Channels) if graceful { - invitesWithError, err := c.App.InviteGuestsToChannelsGracefully(c.Params.TeamId, guestsInvite, c.App.Session().UserId) + cloudUserLimit := *c.App.Config().ExperimentalSettings.CloudUserLimit + var invitesOverLimit []*model.EmailInviteWithError + if c.App.Srv().License() != nil && *c.App.Srv().License().Features.Cloud && cloudUserLimit > 0 && c.IsSystemAdmin() { + subscription, subErr := c.App.Cloud().GetSubscription() + if subErr != nil { + c.Err = subErr + return + } + if subscription == nil || subscription.IsPaidTier != "true" { + guestsInvite.Emails, invitesOverLimit, _ = c.App.GetErrorListForEmailsOverLimit(guestsInvite.Emails, cloudUserLimit) + } + } + + var invitesWithError []*model.EmailInviteWithError + var err *model.AppError + + if guestsInvite.Emails != nil { + invitesWithError, err = c.App.InviteGuestsToChannelsGracefully(c.Params.TeamId, guestsInvite, c.App.Session().UserId) + } + + if len(invitesOverLimit) > 0 { + invitesWithError = append(invitesWithError, invitesOverLimit...) + } + if err != nil { errList := make([]string, 0, len(invitesWithError)) for _, inv := range invitesWithError { diff --git a/api4/team_test.go b/api4/team_test.go index 79f6c3f4dd..ca60d6ac75 100644 --- a/api4/team_test.go +++ b/api4/team_test.go @@ -2726,69 +2726,6 @@ func TestImportTeam(t *testing.T) { }) } -func TestInviteUsersToTeamWithUserLimit(t *testing.T) { - th := Setup(t).InitBasic() - defer th.TearDown() - email1 := th.GenerateTestEmail() - email2 := th.GenerateTestEmail() - email3 := th.GenerateTestEmail() - th.App.UpdateConfig(func(cfg *model.Config) { - *cfg.ServiceSettings.EnableEmailInvitations = true - *cfg.ExperimentalSettings.CloudUserLimit = 2 - }) - - t.Run("System admin, invite when at limit should fail", func(t *testing.T) { - invitesWithErrors, resp := th.SystemAdminClient.InviteUsersToTeamGracefully(th.BasicTeam.Id, []string{email1, email2}) - CheckNoError(t, resp) - require.Len(t, invitesWithErrors, 2) - require.NotNil(t, invitesWithErrors[0].Error) - assert.Equal(t, invitesWithErrors[0].Error.Message, "You've reached the free tier user limit") - require.NotNil(t, invitesWithErrors[1].Error) - assert.Equal(t, invitesWithErrors[1].Error.Message, "You've reached the free tier user limit") - }) - - t.Run("Regular user, invite when at limit should succeed", func(t *testing.T) { - invitesWithErrors, resp := th.Client.InviteUsersToTeamGracefully(th.BasicTeam.Id, []string{email3}) - CheckNoError(t, resp) - require.Len(t, invitesWithErrors, 1) - assert.Nil(t, invitesWithErrors[0].Error) - - }) - - th.App.UpdateConfig(func(cfg *model.Config) { - *cfg.ExperimentalSettings.CloudUserLimit = 5 - }) - - t.Run("With one remaining user inviting more than one user as admin invites only one user", func(t *testing.T) { - invitesWithErrors, resp := th.SystemAdminClient.InviteUsersToTeamGracefully(th.BasicTeam.Id, []string{email1, email2}) - CheckNoError(t, resp) - require.Len(t, invitesWithErrors, 2) - require.Nil(t, invitesWithErrors[0].Error) - require.NotNil(t, invitesWithErrors[1].Error) - assert.Equal(t, invitesWithErrors[1].Error.Message, "You've reached the free tier user limit") - - }) - - t.Run("With one remaining user inviting more than one user as a regular user sends all invites", func(t *testing.T) { - invitesWithErrors, resp := th.Client.InviteUsersToTeamGracefully(th.BasicTeam.Id, []string{email1, email2}) - CheckNoError(t, resp) - require.Len(t, invitesWithErrors, 2) - assert.Nil(t, invitesWithErrors[0].Error) - assert.Nil(t, invitesWithErrors[1].Error) - - }) - - th.App.UpdateConfig(func(cfg *model.Config) { - *cfg.ExperimentalSettings.CloudUserLimit = 100 - }) - t.Run("Invited user count is well below limit", func(t *testing.T) { - invitesWithErrors, resp := th.SystemAdminClient.InviteUsersToTeamGracefully(th.BasicTeam.Id, []string{email1, email2}) - CheckNoError(t, resp) - require.Len(t, invitesWithErrors, 2) - require.Nil(t, invitesWithErrors[0].Error) - }) -} - func TestInviteUsersToTeam(t *testing.T) { th := Setup(t).InitBasic() defer th.TearDown()