in controllers/user/chain/sync_user_groups.go [30:65]
func (h SyncUserGroups) ServeRequest(ctx context.Context, user *sonarApi.SonarUser) error {
log := ctrl.LoggerFrom(ctx).WithValues("userlogin", user.Spec.Login)
log.Info("Syncing user groups in sonar")
existingGroups, err := h.getExistingUserGroups(ctx, user.Spec.Login)
if err != nil {
return err
}
currentGroups := helper.SliceToMap(user.Spec.Groups)
for g := range existingGroups {
if _, ok := currentGroups[g]; ok || g == "sonar-users" {
delete(currentGroups, g)
continue
}
if err = h.sonarApiClient.RemoveUserFromGroup(ctx, user.Spec.Login, g); err != nil {
return fmt.Errorf("failed to remove user from group: %w", err)
}
log.Info("User has been removed from group", "group", g)
}
for g := range currentGroups {
if err = h.sonarApiClient.AddUserToGroup(ctx, user.Spec.Login, g); err != nil {
return fmt.Errorf("failed to add user to group: %w", err)
}
log.Info("User has been added to group", "group", g)
}
log.Info("User groups have been synced")
return nil
}