diff --git a/pkg/modules/auth/openid/openid.go b/pkg/modules/auth/openid/openid.go index 481de1047..d1f09afaa 100644 --- a/pkg/modules/auth/openid/openid.go +++ b/pkg/modules/auth/openid/openid.go @@ -217,10 +217,12 @@ func HandleCallback(c echo.Context) error { if err != nil { log.Errorf("Could not proceed with group routine %v", err) } - err = RemoveUserFromTeamsByIds(s, u, utils.NotIn(oldOidcTeams, oidcTeams)) + teamIDsToLeave := utils.NotIn(oldOidcTeams, oidcTeams) + err = RemoveUserFromTeamsByIds(s, u, teamIDsToLeave) if err != nil { log.Errorf("Found error while leaving teams %v", err) } + err = RemoveEmptySSOTeams(s, u, teamIDsToLeave) } err = s.Commit() if err != nil { @@ -257,6 +259,17 @@ func AssignOrCreateUserToTeams(s *xorm.Session, u *user.User, teamData []models. return oidcTeams, err } +func RemoveEmptySSOTeams(s *xorm.Session, u *user.User, teamIDs []int64) (err error) { + for _, teamID := range teamIDs { + count, err := s.Where("team_id = ?", teamID).Count(&models.TeamMember{}) + if count == 0 && err == nil { + log.Debugf("SSO team with id %v has no members. It will be deleted", teamID) + _, err = s.Where("id = ?", teamID).Delete(&models.Team{}) + } + } + return err +} + func RemoveUserFromTeamsByIds(s *xorm.Session, u *user.User, teamIDs []int64) (err error) { if len(teamIDs) < 1 { @@ -269,7 +282,6 @@ func RemoveUserFromTeamsByIds(s *xorm.Session, u *user.User, teamIDs []int64) (e } log.Debugf("Removing team_member with user_id %v from team_ids %v", u.ID, strings.Join(strSlice, ",")) - _, err = s.Where("team_id IN (?) AND user_id = ?", strings.Join(strSlice, ","), u.ID).Delete(&models.TeamMember{}) return err } diff --git a/pkg/utils/slice_difference.go b/pkg/utils/slice_difference.go index 68ae56bd4..fa3323407 100644 --- a/pkg/utils/slice_difference.go +++ b/pkg/utils/slice_difference.go @@ -16,7 +16,7 @@ package utils -// find the elements which appear in slice1,but not in slice2 +// find the elements which appear in slice1, but not in slice2 func NotIn(slice1 []int64, slice2 []int64) []int64 { var diff []int64