diff --git a/api4/apitestlib.go b/api4/apitestlib.go index b6b3becbbd..39abf6b7fe 100644 --- a/api4/apitestlib.go +++ b/api4/apitestlib.go @@ -781,7 +781,7 @@ func (th *TestHelper) UpdateActiveUser(user *model.User, active bool) { func (th *TestHelper) LinkUserToTeam(user *model.User, team *model.Team) { utils.DisableDebugLogForTest() - err := th.App.JoinUserToTeam(team, user, "") + _, err := th.App.JoinUserToTeam(team, user, "") if err != nil { panic(err) } diff --git a/api4/user_test.go b/api4/user_test.go index 5119efb842..ee1f6c376d 100644 --- a/api4/user_test.go +++ b/api4/user_test.go @@ -378,7 +378,7 @@ func TestCreateUserWebSocketEvent(t *testing.T) { guest, err := th.App.CreateGuest(guest) require.Nil(t, err) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, guest.Id, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, guest.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(guest, th.BasicChannel) diff --git a/app/app_iface.go b/app/app_iface.go index 7e6de6c317..27a25b05af 100644 --- a/app/app_iface.go +++ b/app/app_iface.go @@ -376,10 +376,10 @@ type AppIface interface { AddTeamMemberByToken(userID, tokenID string) (*model.TeamMember, *model.AppError) AddTeamMembers(teamID string, userIDs []string, userRequestorId string, graceful bool) ([]*model.TeamMemberWithError, *model.AppError) AddUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelMember, *model.AppError) - AddUserToTeam(teamID string, userID string, userRequestorId string) (*model.Team, *model.AppError) - AddUserToTeamByInviteId(inviteId string, userID string) (*model.Team, *model.AppError) + AddUserToTeam(teamID string, userID string, userRequestorId string) (*model.Team, *model.TeamMember, *model.AppError) + AddUserToTeamByInviteId(inviteId string, userID string) (*model.Team, *model.TeamMember, *model.AppError) AddUserToTeamByTeamId(teamID string, user *model.User) *model.AppError - AddUserToTeamByToken(userID string, tokenID string) (*model.Team, *model.AppError) + AddUserToTeamByToken(userID string, tokenID string) (*model.Team, *model.TeamMember, *model.AppError) AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError) AllowOAuthAppAccessToUser(userID string, authRequest *model.AuthorizeRequest) (string, *model.AppError) AppendFile(fr io.Reader, path string) (int64, *model.AppError) @@ -799,7 +799,7 @@ type AppIface interface { IsUserSignUpAllowed() *model.AppError JoinChannel(channel *model.Channel, userID string) *model.AppError JoinDefaultChannels(teamID string, user *model.User, shouldBeAdmin bool, userRequestorId string) *model.AppError - JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) *model.AppError + JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) Ldap() einterfaces.LdapInterface LeaveChannel(channelID string, userID string) *model.AppError LeaveTeam(team *model.Team, user *model.User, requestorId string) *model.AppError diff --git a/app/channel.go b/app/channel.go index 3a0f4bb676..40839e81b9 100644 --- a/app/channel.go +++ b/app/channel.go @@ -1373,6 +1373,10 @@ func (a *App) addUserToChannel(user *model.User, channel *model.Channel) (*model } func (a *App) AddUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelMember, *model.AppError) { + // We have to query master here because this is called during LDAP sync from: + // a.createDefaultChannelMemberships -> a.AddTeamMember -> a.AddChannelMember + // So we get a teamMember right after adding a team member which leads to a failure. + // TODO: pass the team member to this method. teamMember, nErr := a.Srv().Store.Team().GetMember(sqlstore.WithMaster(context.Background()), channel.TeamId, user.Id) if nErr != nil { var nfErr *store.ErrNotFound diff --git a/app/channel_test.go b/app/channel_test.go index af1341f624..d83299509e 100644 --- a/app/channel_test.go +++ b/app/channel_test.go @@ -81,11 +81,11 @@ func TestRemoveAllDeactivatedMembersFromChannel(t *testing.T) { th.App.PermanentDeleteTeam(team) }() - _, err = th.App.AddUserToTeam(team.Id, th.BasicUser.Id, "") + _, _, err = th.App.AddUserToTeam(team.Id, th.BasicUser.Id, "") require.Nil(t, err) deacivatedUser := th.CreateUser() - _, err = th.App.AddUserToTeam(team.Id, deacivatedUser.Id, "") + _, _, err = th.App.AddUserToTeam(team.Id, deacivatedUser.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(deacivatedUser, channel) require.Nil(t, err) @@ -118,13 +118,13 @@ func TestMoveChannel(t *testing.T) { th.App.PermanentDeleteTeam(targetTeam) }() - _, err = th.App.AddUserToTeam(sourceTeam.Id, th.BasicUser.Id, "") + _, _, err = th.App.AddUserToTeam(sourceTeam.Id, th.BasicUser.Id, "") require.Nil(t, err) - _, err = th.App.AddUserToTeam(sourceTeam.Id, th.BasicUser2.Id, "") + _, _, err = th.App.AddUserToTeam(sourceTeam.Id, th.BasicUser2.Id, "") require.Nil(t, err) - _, err = th.App.AddUserToTeam(targetTeam.Id, th.BasicUser.Id, "") + _, _, err = th.App.AddUserToTeam(targetTeam.Id, th.BasicUser.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(th.BasicUser, channel1) @@ -136,7 +136,7 @@ func TestMoveChannel(t *testing.T) { err = th.App.MoveChannel(targetTeam, channel1, th.BasicUser) require.NotNil(t, err, "Should have failed due to mismatched members.") - _, err = th.App.AddUserToTeam(targetTeam.Id, th.BasicUser2.Id, "") + _, _, err = th.App.AddUserToTeam(targetTeam.Id, th.BasicUser2.Id, "") require.Nil(t, err) err = th.App.MoveChannel(targetTeam, channel1, th.BasicUser) @@ -148,7 +148,7 @@ func TestMoveChannel(t *testing.T) { channel2 := th.CreateChannel(sourceTeam) defer th.App.PermanentDeleteChannel(channel2) - _, err = th.App.AddUserToTeam(sourceTeam.Id, deacivatedUser.Id, "") + _, _, err = th.App.AddUserToTeam(sourceTeam.Id, deacivatedUser.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(th.BasicUser, channel2) require.Nil(t, err) @@ -234,11 +234,11 @@ func TestRemoveUsersFromChannelNotMemberOfTeam(t *testing.T) { th.App.PermanentDeleteTeam(team2) }() - _, err := th.App.AddUserToTeam(team.Id, th.BasicUser.Id, "") + _, _, err := th.App.AddUserToTeam(team.Id, th.BasicUser.Id, "") require.Nil(t, err) - _, err = th.App.AddUserToTeam(team2.Id, th.BasicUser.Id, "") + _, _, err = th.App.AddUserToTeam(team2.Id, th.BasicUser.Id, "") require.Nil(t, err) - _, err = th.App.AddUserToTeam(team.Id, th.BasicUser2.Id, "") + _, _, err = th.App.AddUserToTeam(team.Id, th.BasicUser2.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(th.BasicUser, channel1) @@ -1098,7 +1098,7 @@ func TestUpdateChannelMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateGuest(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(ruser, th.BasicChannel) @@ -1112,7 +1112,7 @@ func TestUpdateChannelMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateUser(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(ruser, th.BasicChannel) @@ -1126,7 +1126,7 @@ func TestUpdateChannelMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateUser(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(ruser, th.BasicChannel) @@ -1140,7 +1140,7 @@ func TestUpdateChannelMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateGuest(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(ruser, th.BasicChannel) @@ -1157,7 +1157,7 @@ func TestUpdateChannelMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateGuest(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.AddUserToChannel(ruser, th.BasicChannel) diff --git a/app/helper_test.go b/app/helper_test.go index aea7a7fae9..9954adc898 100644 --- a/app/helper_test.go +++ b/app/helper_test.go @@ -400,7 +400,7 @@ func (th *TestHelper) CreateMessagePost(channel *model.Channel, message string) func (th *TestHelper) LinkUserToTeam(user *model.User, team *model.Team) { utils.DisableDebugLogForTest() - err := th.App.JoinUserToTeam(team, user, "") + _, err := th.App.JoinUserToTeam(team, user, "") if err != nil { panic(err) } diff --git a/app/opentracing/opentracing_layer.go b/app/opentracing/opentracing_layer.go index c59bdbf8b5..f9473d0262 100644 --- a/app/opentracing/opentracing_layer.go +++ b/app/opentracing/opentracing_layer.go @@ -479,7 +479,7 @@ func (a *OpenTracingAppLayer) AddUserToChannel(user *model.User, channel *model. return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) AddUserToTeam(teamID string, userID string, userRequestorId string) (*model.Team, *model.AppError) { +func (a *OpenTracingAppLayer) AddUserToTeam(teamID string, userID string, userRequestorId string) (*model.Team, *model.TeamMember, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.AddUserToTeam") @@ -491,17 +491,17 @@ func (a *OpenTracingAppLayer) AddUserToTeam(teamID string, userID string, userRe }() defer span.Finish() - resultVar0, resultVar1 := a.app.AddUserToTeam(teamID, userID, userRequestorId) + resultVar0, resultVar1, resultVar2 := a.app.AddUserToTeam(teamID, userID, userRequestorId) - if resultVar1 != nil { - span.LogFields(spanlog.Error(resultVar1)) + if resultVar2 != nil { + span.LogFields(spanlog.Error(resultVar2)) ext.Error.Set(span, true) } - return resultVar0, resultVar1 + return resultVar0, resultVar1, resultVar2 } -func (a *OpenTracingAppLayer) AddUserToTeamByInviteId(inviteId string, userID string) (*model.Team, *model.AppError) { +func (a *OpenTracingAppLayer) AddUserToTeamByInviteId(inviteId string, userID string) (*model.Team, *model.TeamMember, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.AddUserToTeamByInviteId") @@ -513,14 +513,14 @@ func (a *OpenTracingAppLayer) AddUserToTeamByInviteId(inviteId string, userID st }() defer span.Finish() - resultVar0, resultVar1 := a.app.AddUserToTeamByInviteId(inviteId, userID) + resultVar0, resultVar1, resultVar2 := a.app.AddUserToTeamByInviteId(inviteId, userID) - if resultVar1 != nil { - span.LogFields(spanlog.Error(resultVar1)) + if resultVar2 != nil { + span.LogFields(spanlog.Error(resultVar2)) ext.Error.Set(span, true) } - return resultVar0, resultVar1 + return resultVar0, resultVar1, resultVar2 } func (a *OpenTracingAppLayer) AddUserToTeamByTeamId(teamID string, user *model.User) *model.AppError { @@ -545,7 +545,7 @@ func (a *OpenTracingAppLayer) AddUserToTeamByTeamId(teamID string, user *model.U return resultVar0 } -func (a *OpenTracingAppLayer) AddUserToTeamByToken(userID string, tokenID string) (*model.Team, *model.AppError) { +func (a *OpenTracingAppLayer) AddUserToTeamByToken(userID string, tokenID string) (*model.Team, *model.TeamMember, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.AddUserToTeamByToken") @@ -557,14 +557,14 @@ func (a *OpenTracingAppLayer) AddUserToTeamByToken(userID string, tokenID string }() defer span.Finish() - resultVar0, resultVar1 := a.app.AddUserToTeamByToken(userID, tokenID) + resultVar0, resultVar1, resultVar2 := a.app.AddUserToTeamByToken(userID, tokenID) - if resultVar1 != nil { - span.LogFields(spanlog.Error(resultVar1)) + if resultVar2 != nil { + span.LogFields(spanlog.Error(resultVar2)) ext.Error.Set(span, true) } - return resultVar0, resultVar1 + return resultVar0, resultVar1, resultVar2 } func (a *OpenTracingAppLayer) AdjustImage(file io.Reader) (*bytes.Buffer, *model.AppError) { @@ -10675,7 +10675,7 @@ func (a *OpenTracingAppLayer) JoinDefaultChannels(teamID string, user *model.Use return resultVar0 } -func (a *OpenTracingAppLayer) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) *model.AppError { +func (a *OpenTracingAppLayer) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.JoinUserToTeam") @@ -10687,14 +10687,14 @@ func (a *OpenTracingAppLayer) JoinUserToTeam(team *model.Team, user *model.User, }() defer span.Finish() - resultVar0 := a.app.JoinUserToTeam(team, user, userRequestorId) + resultVar0, resultVar1 := a.app.JoinUserToTeam(team, user, userRequestorId) - if resultVar0 != nil { - span.LogFields(spanlog.Error(resultVar0)) + if resultVar1 != nil { + span.LogFields(spanlog.Error(resultVar1)) ext.Error.Set(span, true) } - return resultVar0 + return resultVar0, resultVar1 } func (a *OpenTracingAppLayer) LeaveChannel(channelID string, userID string) *model.AppError { diff --git a/app/slashcommands/command_invite_test.go b/app/slashcommands/command_invite_test.go index d8d9186f95..e451d178e0 100644 --- a/app/slashcommands/command_invite_test.go +++ b/app/slashcommands/command_invite_test.go @@ -41,7 +41,7 @@ func TestInviteProvider(t *testing.T) { Description: "a test bot", }) require.Nil(t, err) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, bot2.UserId, basicUser3.Id) + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, bot2.UserId, basicUser3.Id) require.Nil(t, err) bot3, err := th.App.CreateBot(&model.Bot{ @@ -50,7 +50,7 @@ func TestInviteProvider(t *testing.T) { Description: "a test bot", }) require.Nil(t, err) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, bot3.UserId, basicUser3.Id) + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, bot3.UserId, basicUser3.Id) require.Nil(t, err) err = th.App.RemoveUserFromTeam(th.BasicTeam.Id, bot3.UserId, basicUser3.Id) require.Nil(t, err) diff --git a/app/slashcommands/helper_test.go b/app/slashcommands/helper_test.go index 28f2a4b3d0..9b0f6afc8b 100644 --- a/app/slashcommands/helper_test.go +++ b/app/slashcommands/helper_test.go @@ -347,7 +347,7 @@ func (th *TestHelper) createPost(channel *model.Channel) *model.Post { func (th *TestHelper) linkUserToTeam(user *model.User, team *model.Team) { utils.DisableDebugLogForTest() - err := th.App.JoinUserToTeam(team, user, "") + _, err := th.App.JoinUserToTeam(team, user, "") if err != nil { panic(err) } diff --git a/app/team.go b/app/team.go index 8cba7bd1fb..38bb37e42a 100644 --- a/app/team.go +++ b/app/team.go @@ -65,7 +65,7 @@ func (a *App) CreateTeamWithUser(team *model.Team, userID string) (*model.Team, return nil, err } - if err = a.JoinUserToTeam(rteam, user, ""); err != nil { + if _, err := a.JoinUserToTeam(rteam, user, ""); err != nil { return nil, err } @@ -480,7 +480,7 @@ func (a *App) sendUpdatedMemberRoleEvent(userID string, member *model.TeamMember a.Publish(message) } -func (a *App) AddUserToTeam(teamID string, userID string, userRequestorId string) (*model.Team, *model.AppError) { +func (a *App) AddUserToTeam(teamID string, userID string, userRequestorId string) (*model.Team, *model.TeamMember, *model.AppError) { tchan := make(chan store.StoreResult, 1) go func() { team, err := a.Srv().Store.Team().Get(teamID) @@ -500,9 +500,9 @@ func (a *App) AddUserToTeam(teamID string, userID string, userRequestorId string var nfErr *store.ErrNotFound switch { case errors.As(result.NErr, &nfErr): - return nil, model.NewAppError("AddUserToTeam", "app.team.get.find.app_error", nil, nfErr.Error(), http.StatusNotFound) + return nil, nil, model.NewAppError("AddUserToTeam", "app.team.get.find.app_error", nil, nfErr.Error(), http.StatusNotFound) default: - return nil, model.NewAppError("AddUserToTeam", "app.team.get.finding.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) + return nil, nil, model.NewAppError("AddUserToTeam", "app.team.get.finding.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) } } team := result.Data.(*model.Team) @@ -512,18 +512,19 @@ func (a *App) AddUserToTeam(teamID string, userID string, userRequestorId string var nfErr *store.ErrNotFound switch { case errors.As(result.NErr, &nfErr): - return nil, model.NewAppError("AddUserToTeam", MissingAccountError, nil, nfErr.Error(), http.StatusNotFound) + return nil, nil, model.NewAppError("AddUserToTeam", MissingAccountError, nil, nfErr.Error(), http.StatusNotFound) default: - return nil, model.NewAppError("AddUserToTeam", "app.user.get.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) + return nil, nil, model.NewAppError("AddUserToTeam", "app.user.get.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) } } user := result.Data.(*model.User) - if err := a.JoinUserToTeam(team, user, userRequestorId); err != nil { - return nil, err + teamMember, err := a.JoinUserToTeam(team, user, userRequestorId) + if err != nil { + return nil, nil, err } - return team, nil + return team, teamMember, nil } func (a *App) AddUserToTeamByTeamId(teamID string, user *model.User) *model.AppError { @@ -538,22 +539,25 @@ func (a *App) AddUserToTeamByTeamId(teamID string, user *model.User) *model.AppE } } - return a.JoinUserToTeam(team, user, "") + if _, err := a.JoinUserToTeam(team, user, ""); err != nil { + return err + } + return nil } -func (a *App) AddUserToTeamByToken(userID string, tokenID string) (*model.Team, *model.AppError) { +func (a *App) AddUserToTeamByToken(userID string, tokenID string) (*model.Team, *model.TeamMember, *model.AppError) { token, err := a.Srv().Store.Token().GetByToken(tokenID) if err != nil { - return nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.signup_link_invalid.app_error", nil, err.Error(), http.StatusBadRequest) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.signup_link_invalid.app_error", nil, err.Error(), http.StatusBadRequest) } if token.Type != TokenTypeTeamInvitation && token.Type != TokenTypeGuestInvitation { - return nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.signup_link_invalid.app_error", nil, "", http.StatusBadRequest) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.signup_link_invalid.app_error", nil, "", http.StatusBadRequest) } if model.GetMillis()-token.CreateAt >= InvitationExpiryTime { a.DeleteToken(token) - return nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.signup_link_expired.app_error", nil, "", http.StatusBadRequest) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.signup_link_expired.app_error", nil, "", http.StatusBadRequest) } tokenData := model.MapFromJson(strings.NewReader(token.Extra)) @@ -577,15 +581,15 @@ func (a *App) AddUserToTeamByToken(userID string, tokenID string) (*model.Team, var nfErr *store.ErrNotFound switch { case errors.As(result.NErr, &nfErr): - return nil, model.NewAppError("AddUserToTeamByToken", "app.team.get.find.app_error", nil, nfErr.Error(), http.StatusNotFound) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "app.team.get.find.app_error", nil, nfErr.Error(), http.StatusNotFound) default: - return nil, model.NewAppError("AddUserToTeamByToken", "app.team.get.finding.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "app.team.get.finding.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) } } team := result.Data.(*model.Team) if team.IsGroupConstrained() { - return nil, model.NewAppError("AddUserToTeamByToken", "app.team.invite_token.group_constrained.error", nil, "", http.StatusForbidden) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "app.team.invite_token.group_constrained.error", nil, "", http.StatusForbidden) } result = <-uchan @@ -593,28 +597,29 @@ func (a *App) AddUserToTeamByToken(userID string, tokenID string) (*model.Team, var nfErr *store.ErrNotFound switch { case errors.As(result.NErr, &nfErr): - return nil, model.NewAppError("AddUserToTeamByToken", MissingAccountError, nil, nfErr.Error(), http.StatusNotFound) + return nil, nil, model.NewAppError("AddUserToTeamByToken", MissingAccountError, nil, nfErr.Error(), http.StatusNotFound) default: - return nil, model.NewAppError("AddUserToTeamByToken", "app.user.get.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "app.user.get.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) } } user := result.Data.(*model.User) if user.IsGuest() && token.Type == TokenTypeTeamInvitation { - return nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.invalid_invitation_type.app_error", nil, "", http.StatusBadRequest) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.invalid_invitation_type.app_error", nil, "", http.StatusBadRequest) } if !user.IsGuest() && token.Type == TokenTypeGuestInvitation { - return nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.invalid_invitation_type.app_error", nil, "", http.StatusBadRequest) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "api.user.create_user.invalid_invitation_type.app_error", nil, "", http.StatusBadRequest) } - if err := a.JoinUserToTeam(team, user, ""); err != nil { - return nil, err + teamMember, appErr := a.JoinUserToTeam(team, user, "") + if appErr != nil { + return nil, nil, appErr } if token.Type == TokenTypeGuestInvitation { channels, err := a.Srv().Store.Channel().GetChannelsByIds(strings.Split(tokenData["channels"], " "), false) if err != nil { - return nil, model.NewAppError("AddUserToTeamByToken", "app.channel.get_channels_by_ids.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, nil, model.NewAppError("AddUserToTeamByToken", "app.channel.get_channels_by_ids.app_error", nil, err.Error(), http.StatusInternalServerError) } for _, channel := range channels { @@ -629,10 +634,10 @@ func (a *App) AddUserToTeamByToken(userID string, tokenID string) (*model.Team, mlog.Warn("Error while deleting token", mlog.Err(err)) } - return team, nil + return team, teamMember, nil } -func (a *App) AddUserToTeamByInviteId(inviteId string, userID string) (*model.Team, *model.AppError) { +func (a *App) AddUserToTeamByInviteId(inviteId string, userID string) (*model.Team, *model.TeamMember, *model.AppError) { tchan := make(chan store.StoreResult, 1) go func() { team, err := a.Srv().Store.Team().GetByInviteId(inviteId) @@ -652,9 +657,9 @@ func (a *App) AddUserToTeamByInviteId(inviteId string, userID string) (*model.Te var nfErr *store.ErrNotFound switch { case errors.As(result.NErr, &nfErr): - return nil, model.NewAppError("AddUserToTeamByInviteId", "app.team.get_by_invite_id.finding.app_error", nil, nfErr.Error(), http.StatusNotFound) + return nil, nil, model.NewAppError("AddUserToTeamByInviteId", "app.team.get_by_invite_id.finding.app_error", nil, nfErr.Error(), http.StatusNotFound) default: - return nil, model.NewAppError("AddUserToTeamByInviteId", "app.team.get_by_invite_id.finding.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) + return nil, nil, model.NewAppError("AddUserToTeamByInviteId", "app.team.get_by_invite_id.finding.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) } } team := result.Data.(*model.Team) @@ -664,18 +669,19 @@ func (a *App) AddUserToTeamByInviteId(inviteId string, userID string) (*model.Te var nfErr *store.ErrNotFound switch { case errors.As(result.NErr, &nfErr): - return nil, model.NewAppError("AddUserToTeamByInviteId", MissingAccountError, nil, nfErr.Error(), http.StatusNotFound) + return nil, nil, model.NewAppError("AddUserToTeamByInviteId", MissingAccountError, nil, nfErr.Error(), http.StatusNotFound) default: - return nil, model.NewAppError("AddUserToTeamByInviteId", "app.user.get.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) + return nil, nil, model.NewAppError("AddUserToTeamByInviteId", "app.user.get.app_error", nil, result.NErr.Error(), http.StatusInternalServerError) } } user := result.Data.(*model.User) - if err := a.JoinUserToTeam(team, user, ""); err != nil { - return nil, err + teamMember, err := a.JoinUserToTeam(team, user, "") + if err != nil { + return nil, nil, err } - return team, nil + return team, teamMember, nil } // Returns three values: @@ -753,16 +759,16 @@ func (a *App) joinUserToTeam(team *model.Team, user *model.User) (*model.TeamMem return member, false, nil } -func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) *model.AppError { +func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) (*model.TeamMember, *model.AppError) { if !a.isTeamEmailAllowed(user, team) { - return model.NewAppError("JoinUserToTeam", "api.team.join_user_to_team.allowed_domains.app_error", nil, "", http.StatusBadRequest) + return nil, model.NewAppError("JoinUserToTeam", "api.team.join_user_to_team.allowed_domains.app_error", nil, "", http.StatusBadRequest) } - tm, alreadyAdded, err := a.joinUserToTeam(team, user) + teamMember, alreadyAdded, err := a.joinUserToTeam(team, user) if err != nil { - return err + return nil, err } if alreadyAdded { - return nil + return teamMember, nil } if pluginsEnvironment := a.GetPluginsEnvironment(); pluginsEnvironment != nil { @@ -774,14 +780,14 @@ func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId a.Srv().Go(func() { pluginContext := a.PluginContext() pluginsEnvironment.RunMultiPluginHook(func(hooks plugin.Hooks) bool { - hooks.UserHasJoinedTeam(pluginContext, tm, actor) + hooks.UserHasJoinedTeam(pluginContext, teamMember, actor) return true }, plugin.UserHasJoinedTeamID) }) } if _, err := a.Srv().Store.User().UpdateUpdateAt(user.Id); err != nil { - return model.NewAppError("JoinUserToTeam", "app.user.update_update.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("JoinUserToTeam", "app.user.update_update.app_error", nil, err.Error(), http.StatusInternalServerError) } if _, err := a.createInitialSidebarCategories(user.Id, team.Id); err != nil { @@ -816,7 +822,7 @@ func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId message.Add("user_id", user.Id) a.Publish(message) - return nil + return teamMember, nil } func (a *App) GetTeam(teamID string) (*model.Team, *model.AppError) { @@ -1050,11 +1056,7 @@ func (a *App) GetTeamMembersByIds(teamID string, userIDs []string, restrictions } func (a *App) AddTeamMember(teamID, userID string) (*model.TeamMember, *model.AppError) { - if _, err := a.AddUserToTeam(teamID, userID, ""); err != nil { - return nil, err - } - - teamMember, err := a.GetTeamMember(teamID, userID) + _, teamMember, err := a.AddUserToTeam(teamID, userID, "") if err != nil { return nil, err } @@ -1071,7 +1073,8 @@ func (a *App) AddTeamMembers(teamID string, userIDs []string, userRequestorId st var membersWithErrors []*model.TeamMemberWithError for _, userID := range userIDs { - if _, err := a.AddUserToTeam(teamID, userID, userRequestorId); err != nil { + _, teamMember, err := a.AddUserToTeam(teamID, userID, userRequestorId) + if err != nil { if graceful { membersWithErrors = append(membersWithErrors, &model.TeamMemberWithError{ UserId: userID, @@ -1082,10 +1085,6 @@ func (a *App) AddTeamMembers(teamID string, userIDs []string, userRequestorId st return nil, err } - teamMember, err := a.GetTeamMember(teamID, userID) - if err != nil { - return nil, err - } membersWithErrors = append(membersWithErrors, &model.TeamMemberWithError{ UserId: userID, Member: teamMember, @@ -1101,12 +1100,7 @@ func (a *App) AddTeamMembers(teamID string, userIDs []string, userRequestorId st } func (a *App) AddTeamMemberByToken(userID, tokenID string) (*model.TeamMember, *model.AppError) { - team, err := a.AddUserToTeamByToken(userID, tokenID) - if err != nil { - return nil, err - } - - teamMember, err := a.GetTeamMember(team.Id, userID) + _, teamMember, err := a.AddUserToTeamByToken(userID, tokenID) if err != nil { return nil, err } @@ -1115,7 +1109,7 @@ func (a *App) AddTeamMemberByToken(userID, tokenID string) (*model.TeamMember, * } func (a *App) AddTeamMemberByInviteId(inviteId, userID string) (*model.TeamMember, *model.AppError) { - team, err := a.AddUserToTeamByInviteId(inviteId, userID) + team, teamMember, err := a.AddUserToTeamByInviteId(inviteId, userID) if err != nil { return nil, err } @@ -1124,10 +1118,6 @@ func (a *App) AddTeamMemberByInviteId(inviteId, userID string) (*model.TeamMembe return nil, model.NewAppError("AddTeamMemberByInviteId", "app.team.invite_id.group_constrained.error", nil, "", http.StatusForbidden) } - teamMember, err := a.GetTeamMember(team.Id, userID) - if err != nil { - return nil, err - } return teamMember, nil } diff --git a/app/team_test.go b/app/team_test.go index 001088cb9d..a6302ecc0d 100644 --- a/app/team_test.go +++ b/app/team_test.go @@ -76,7 +76,7 @@ func TestAddUserToTeam(t *testing.T) { ruser, _ := th.App.CreateUser(&user) defer th.App.PermanentDeleteUser(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err, "Should add user to the team") }) @@ -89,7 +89,7 @@ func TestAddUserToTeam(t *testing.T) { ruser, _ := th.App.CreateUser(&user) defer th.App.PermanentDeleteUser(&user) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err, "Should have allowed whitelisted user") }) @@ -103,7 +103,7 @@ func TestAddUserToTeam(t *testing.T) { require.Nil(t, err, "Error creating user: %s", err) defer th.App.PermanentDeleteUser(&user) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.NotNil(t, err, "Should not add restricted user") require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") @@ -112,7 +112,7 @@ func TestAddUserToTeam(t *testing.T) { require.Nil(t, err, "Error creating authservice user: %s", err) defer th.App.PermanentDeleteUser(&user) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.NotNil(t, err, "Should not add authservice user") require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") @@ -123,7 +123,7 @@ func TestAddUserToTeam(t *testing.T) { }) require.Nil(t, err) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, bot.UserId, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, bot.UserId, "") assert.Nil(t, err, "should be able to add bot to domain restricted team") }) @@ -136,7 +136,7 @@ func TestAddUserToTeam(t *testing.T) { ruser, _ := th.App.CreateUser(&user) defer th.App.PermanentDeleteUser(&user) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.NotNil(t, err, "Should not add restricted user") require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") }) @@ -159,13 +159,13 @@ func TestAddUserToTeam(t *testing.T) { defer th.App.PermanentDeleteUser(&user2) defer th.App.PermanentDeleteUser(&user3) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser1.Id, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser1.Id, "") require.Nil(t, err, "Should have allowed whitelisted user1") - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser2.Id, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser2.Id, "") require.Nil(t, err, "Should have allowed whitelisted user2") - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser3.Id, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser3.Id, "") require.NotNil(t, err, "Should not have allowed restricted user3") require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") }) @@ -174,7 +174,7 @@ func TestAddUserToTeam(t *testing.T) { user := th.CreateUser() team := th.CreateTeam() - _, err := th.App.AddUserToTeam(team.Id, user.Id, "") + _, _, err := th.App.AddUserToTeam(team.Id, user.Id, "") require.Nil(t, err) res, err := th.App.GetSidebarCategories(user.Id, team.Id) @@ -195,7 +195,7 @@ func TestAddUserToTeamByToken(t *testing.T) { rguest := th.CreateGuest() t.Run("invalid token", func(t *testing.T) { - _, err := th.App.AddUserToTeamByToken(ruser.Id, "123") + _, _, err := th.App.AddUserToTeamByToken(ruser.Id, "123") require.NotNil(t, err, "Should fail on unexisting token") }) @@ -208,7 +208,7 @@ func TestAddUserToTeamByToken(t *testing.T) { require.NoError(t, th.App.Srv().Store.Token().Save(token)) defer th.App.DeleteToken(token) - _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) + _, _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) require.NotNil(t, err, "Should fail on bad token type") }) @@ -222,7 +222,7 @@ func TestAddUserToTeamByToken(t *testing.T) { require.NoError(t, th.App.Srv().Store.Token().Save(token)) defer th.App.DeleteToken(token) - _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) + _, _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) require.NotNil(t, err, "Should fail on expired token") }) @@ -234,7 +234,7 @@ func TestAddUserToTeamByToken(t *testing.T) { require.NoError(t, th.App.Srv().Store.Token().Save(token)) defer th.App.DeleteToken(token) - _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) + _, _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) require.NotNil(t, err, "Should fail on bad team id") }) @@ -246,7 +246,7 @@ func TestAddUserToTeamByToken(t *testing.T) { require.NoError(t, th.App.Srv().Store.Token().Save(token)) defer th.App.DeleteToken(token) - _, err := th.App.AddUserToTeamByToken(model.NewId(), token.Token) + _, _, err := th.App.AddUserToTeamByToken(model.NewId(), token.Token) require.NotNil(t, err, "Should fail on bad user id") }) @@ -256,7 +256,7 @@ func TestAddUserToTeamByToken(t *testing.T) { model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id}), ) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) + _, _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) require.Nil(t, err, "Should add user to the team") _, nErr := th.App.Srv().Store.Token().GetByToken(token.Token) @@ -273,7 +273,7 @@ func TestAddUserToTeamByToken(t *testing.T) { model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id}), ) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, err := th.App.AddUserToTeamByToken(rguest.Id, token.Token) + _, _, err := th.App.AddUserToTeamByToken(rguest.Id, token.Token) assert.NotNil(t, err) }) @@ -283,7 +283,7 @@ func TestAddUserToTeamByToken(t *testing.T) { model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id, "channels": th.BasicChannel.Id}), ) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) + _, _, err := th.App.AddUserToTeamByToken(ruser.Id, token.Token) assert.NotNil(t, err) }) @@ -298,7 +298,7 @@ func TestAddUserToTeamByToken(t *testing.T) { model.MapToJson(map[string]string{"teamId": th.BasicTeam.Id, "channels": th.BasicChannel.Id}), ) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, err := th.App.AddUserToTeamByToken(rguest.Id, token.Token) + _, _, err := th.App.AddUserToTeamByToken(rguest.Id, token.Token) require.NotNil(t, err) assert.Equal(t, "api.team.join_user_to_team.allowed_domains.app_error", err.Id) }) @@ -319,7 +319,7 @@ func TestAddUserToTeamByToken(t *testing.T) { th.App.InvalidateCacheForUser(rguest.Id) require.NoError(t, err) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, appErr := th.App.AddUserToTeamByToken(rguest.Id, token.Token) + _, _, appErr := th.App.AddUserToTeamByToken(rguest.Id, token.Token) require.Nil(t, appErr) rguest.Email = guestEmail _, err = th.App.Srv().Store.User().Update(rguest, false) @@ -342,7 +342,7 @@ func TestAddUserToTeamByToken(t *testing.T) { _, err = th.App.Srv().Store.User().Update(rguest, false) require.NoError(t, err) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, appErr := th.App.AddUserToTeamByToken(rguest.Id, token.Token) + _, _, appErr := th.App.AddUserToTeamByToken(rguest.Id, token.Token) require.Nil(t, appErr) th.BasicTeam.AllowedDomains = "" _, err = th.Server.Store.Team().Update(th.BasicTeam) @@ -356,7 +356,7 @@ func TestAddUserToTeamByToken(t *testing.T) { ) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, err := th.App.AddUserToTeamByToken(rguest.Id, token.Token) + _, _, err := th.App.AddUserToTeamByToken(rguest.Id, token.Token) require.Nil(t, err, "Should add user to the team") _, nErr := th.App.Srv().Store.Token().GetByToken(token.Token) @@ -379,7 +379,7 @@ func TestAddUserToTeamByToken(t *testing.T) { ) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, err = th.App.AddUserToTeamByToken(ruser.Id, token.Token) + _, _, err = th.App.AddUserToTeamByToken(ruser.Id, token.Token) require.NotNil(t, err, "Should return an error when trying to join a group-constrained team.") require.Equal(t, "app.team.invite_token.group_constrained.error", err.Id) @@ -403,7 +403,7 @@ func TestAddUserToTeamByToken(t *testing.T) { ) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, err = th.App.AddUserToTeamByToken(ruser.Id, token.Token) + _, _, err = th.App.AddUserToTeamByToken(ruser.Id, token.Token) require.NotNil(t, err, "Should not add restricted user") require.Equal(t, "JoinUserToTeam", err.Where, "Error should be JoinUserToTeam") }) @@ -418,7 +418,7 @@ func TestAddUserToTeamByToken(t *testing.T) { ) require.NoError(t, th.App.Srv().Store.Token().Save(token)) - _, err := th.App.AddUserToTeamByToken(user.Id, token.Token) + _, _, err := th.App.AddUserToTeamByToken(user.Id, token.Token) require.Nil(t, err) res, err := th.App.GetSidebarCategories(user.Id, team.Id) @@ -880,7 +880,7 @@ func TestGetTeamMembers(t *testing.T) { require.NotNil(t, ruser) defer th.App.PermanentDeleteUser(&user) - _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err = th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) // Store the users for comparison later @@ -1041,7 +1041,7 @@ func TestUpdateTeamMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateGuest(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, "team_user") @@ -1052,7 +1052,7 @@ func TestUpdateTeamMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateUser(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, "team_guest") @@ -1063,7 +1063,7 @@ func TestUpdateTeamMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateUser(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, "team_user team_admin") @@ -1074,7 +1074,7 @@ func TestUpdateTeamMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateGuest(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.CreateRole(&model.Role{Name: "custom", DisplayName: "custom", Description: "custom"}) @@ -1088,7 +1088,7 @@ func TestUpdateTeamMemberRolesChangingGuest(t *testing.T) { user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@example.com", Nickname: "Darth Vader", Username: "vader" + model.NewId(), Password: "passwd1", AuthService: ""} ruser, _ := th.App.CreateGuest(&user) - _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") + _, _, err := th.App.AddUserToTeam(th.BasicTeam.Id, ruser.Id, "") require.Nil(t, err) _, err = th.App.UpdateTeamMemberRoles(th.BasicTeam.Id, ruser.Id, "team_guest team_user") diff --git a/app/user.go b/app/user.go index 860fd7f5be..fd1626d311 100644 --- a/app/user.go +++ b/app/user.go @@ -96,7 +96,7 @@ func (a *App) CreateUserWithToken(user *model.User, token *model.Token) (*model. return nil, err } - if err := a.JoinUserToTeam(team, ruser, ""); err != nil { + if _, err := a.JoinUserToTeam(team, ruser, ""); err != nil { return nil, err } @@ -149,7 +149,7 @@ func (a *App) CreateUserWithInviteId(user *model.User, inviteId, redirect string return nil, err } - if err := a.JoinUserToTeam(team, ruser, ""); err != nil { + if _, err := a.JoinUserToTeam(team, ruser, ""); err != nil { return nil, err } diff --git a/cmd/mattermost/commands/team.go b/cmd/mattermost/commands/team.go index e2c863be56..c633198baa 100644 --- a/cmd/mattermost/commands/team.go +++ b/cmd/mattermost/commands/team.go @@ -243,7 +243,7 @@ func addUserToTeam(a *app.App, team *model.Team, user *model.User, userArg strin CommandPrintErrorln("Can't find user '" + userArg + "'") return } - if err := a.JoinUserToTeam(team, user, ""); err != nil { + if _, err := a.JoinUserToTeam(team, user, ""); err != nil { CommandPrintErrorln("Unable to add '" + userArg + "' to " + team.Name) return } diff --git a/migrations/helper_test.go b/migrations/helper_test.go index f04b330636..4c439c8b30 100644 --- a/migrations/helper_test.go +++ b/migrations/helper_test.go @@ -206,7 +206,7 @@ func (th *TestHelper) CreatePost(channel *model.Channel) *model.Post { func (th *TestHelper) LinkUserToTeam(user *model.User, team *model.Team) { utils.DisableDebugLogForTest() - err := th.App.JoinUserToTeam(team, user, "") + _, err := th.App.JoinUserToTeam(team, user, "") if err != nil { panic(err) } diff --git a/services/slackimport/slackimport.go b/services/slackimport/slackimport.go index 9f44c50f4b..2287ce6002 100644 --- a/services/slackimport/slackimport.go +++ b/services/slackimport/slackimport.go @@ -84,7 +84,7 @@ type slackComment struct { type Actions struct { UpdateActive func(*model.User, bool) (*model.User, *model.AppError) AddUserToChannel func(*model.User, *model.Channel) (*model.ChannelMember, *model.AppError) - JoinUserToTeam func(*model.Team, *model.User, string) *model.AppError + JoinUserToTeam func(*model.Team, *model.User, string) (*model.TeamMember, *model.AppError) CreateDirectChannel func(string, string, ...model.ChannelOption) (*model.Channel, *model.AppError) CreateGroupChannel func([]string) (*model.Channel, *model.AppError) CreateChannel func(*model.Channel, bool) (*model.Channel, *model.AppError) @@ -234,7 +234,7 @@ func (si *SlackImporter) slackAddUsers(teamId string, slackusers []slackUser, im // Check for email conflict and use existing user if found if existingUser, err := si.store.User().GetByEmail(email); err == nil { addedUsers[sUser.Id] = existingUser - if err := si.actions.JoinUserToTeam(team, addedUsers[sUser.Id], ""); err != nil { + if _, err := si.actions.JoinUserToTeam(team, addedUsers[sUser.Id], ""); err != nil { importerLog.WriteString(i18n.T("api.slackimport.slack_add_users.merge_existing_failed", map[string]interface{}{"Email": existingUser.Email, "Username": existingUser.Username})) } else { importerLog.WriteString(i18n.T("api.slackimport.slack_add_users.merge_existing", map[string]interface{}{"Email": existingUser.Email, "Username": existingUser.Username})) @@ -695,7 +695,7 @@ func (si *SlackImporter) oldImportUser(team *model.Team, user *model.User) *mode mlog.Warn("Failed to set email verified.", mlog.Err(err)) } - if err := si.actions.JoinUserToTeam(team, user, ""); err != nil { + if _, err := si.actions.JoinUserToTeam(team, user, ""); err != nil { mlog.Warn("Failed to join team when importing.", mlog.Err(err)) }