func()

in controllers/group/chain/sync_group_permissions.go [25:60]


func (h SyncGroupPermissions) ServeRequest(ctx context.Context, group *sonarApi.SonarGroup) error {
	log := ctrl.LoggerFrom(ctx).WithValues("name", group.Spec.Name)
	log.Info("Syncing group permissions in sonar")

	existingPermissions, err := h.getExistingGroupPermissions(ctx, group.Spec.Name)
	if err != nil {
		return err
	}

	currentPermissions := helper.SliceToMap(group.Spec.Permissions)

	for p := range existingPermissions {
		if _, ok := currentPermissions[p]; ok {
			delete(currentPermissions, p)
			continue
		}

		if err = h.sonarApiClient.RemovePermissionFromGroup(ctx, group.Spec.Name, p); err != nil {
			return fmt.Errorf("failed to remove group permission: %w", err)
		}

		log.Info("Group permission has been removed", "permission", p)
	}

	for g := range currentPermissions {
		if err = h.sonarApiClient.AddPermissionToGroup(ctx, group.Spec.Name, g); err != nil {
			return fmt.Errorf("failed to add group permission: %w", err)
		}

		log.Info("Group permission has been added", "permission", g)
	}

	log.Info("Group permissions have been synced")

	return nil
}