func()

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
}