diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java index 9c4409abd..4a2a2c69e 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java @@ -62,7 +62,11 @@ final class MgmtRolloutMapper { return toResponseRollout(rollouts, false); } - static List toResponseRollout(final List rollouts, final boolean withDetails) { + static List toResponseRolloutWithDetails(final List rollouts) { + return toResponseRollout(rollouts, true); + } + + private static List toResponseRollout(final List rollouts, final boolean withDetails) { if (rollouts == null) { return Collections.emptyList(); } diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java index 472de8527..aa1b7ed85 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java @@ -94,19 +94,20 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { final Pageable pageable = new OffsetBasedPageRequest(sanitizedOffsetParam, sanitizedLimitParam, sorting); final Page rollouts; if (rsqlParam != null) { - rollouts = this.rolloutManagement.findByRsql(pageable, rsqlParam, false); + rollouts = rolloutManagement.findByRsql(pageable, rsqlParam, false); } else { - rollouts = this.rolloutManagement.findAll(pageable, false); + rollouts = rolloutManagement.findAll(pageable, false); } final long totalElements = rollouts.getTotalElements(); + final List rest; if (isFullMode) { - this.rolloutManagement.setRolloutStatusDetails(rollouts); + rest = MgmtRolloutMapper.toResponseRolloutWithDetails(rolloutManagement.getRolloutWithStatusDetails(rollouts).getContent()); + } else { + rest = MgmtRolloutMapper.toResponseRollout(rollouts.getContent()); } - final List rest = MgmtRolloutMapper.toResponseRollout(rollouts.getContent(), isFullMode); - return ResponseEntity.ok(new PagedList<>(rest, totalElements)); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index 055faae6f..7e34f0c3b 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -412,6 +412,6 @@ public interface RolloutManagement { * * @param rollouts the rollouts to be enriched. */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_UPDATE) - void setRolloutStatusDetails(final Slice rollouts); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Slice getRolloutWithStatusDetails(final Slice rollouts); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java index 8a6fffe70..bf2e85e27 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java @@ -277,8 +277,7 @@ public class JpaRolloutManagement implements RolloutManagement { final Slice rollouts = JpaManagementHelper.convertPage( rolloutRepository.findAll(RolloutSpecification.isDeleted(deleted, pageable.getSort()), JpaRollout_.GRAPH_ROLLOUT_DS, pageable), pageable); - setRolloutStatusDetails(rollouts); - return rollouts; + return getRolloutWithStatusDetails(rollouts); } @Override @@ -295,8 +294,7 @@ public class JpaRolloutManagement implements RolloutManagement { final boolean deleted) { final Slice findAll = JpaManagementHelper.findAllWithoutCountBySpec(rolloutRepository, pageable, Collections.singletonList(RolloutSpecification.likeName(searchText, deleted))); - setRolloutStatusDetails(findAll); - return findAll; + return getRolloutWithStatusDetails(findAll); } @Override @@ -499,7 +497,7 @@ public class JpaRolloutManagement implements RolloutManagement { } @Override - public void setRolloutStatusDetails(final Slice rollouts) { + public Slice getRolloutWithStatusDetails(final Slice rollouts) { final List rolloutIds = rollouts.getContent().stream().map(Rollout::getId).toList(); final Map> allStatesForRollout = getStatusCountItemForRollout(rolloutIds); @@ -510,6 +508,7 @@ public class JpaRolloutManagement implements RolloutManagement { ((JpaRollout) rollout).setTotalTargetCountStatus(totalTargetCountStatus); }); } + return rollouts; } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementSecurityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementSecurityTest.java index 71036c96e..f7ceced80 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementSecurityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementSecurityTest.java @@ -22,11 +22,9 @@ import org.eclipse.hawkbit.repository.builder.DistributionSetCreate; import org.eclipse.hawkbit.repository.builder.DistributionSetTypeCreate; import org.eclipse.hawkbit.repository.builder.DynamicRolloutGroupTemplate; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; -import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; -import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.test.util.WithUser; import org.junit.jupiter.api.Test; import org.springframework.data.domain.PageImpl; @@ -159,7 +157,7 @@ class RolloutManagementSecurityTest extends AbstractJpaIntegrationTest { @Test @Description("Tests ManagementAPI PreAuthorized method with correct and insufficient permissions.") - void setRolloutStatusDetailsPermissionsCheck() { + void getRolloutWithStatusDetailsPermissionsCheck() { final String rolloutName = "rollout-std"; final int amountGroups = 5; // static only final String targetPrefix = "controller-rollout-std-"; @@ -169,9 +167,9 @@ class RolloutManagementSecurityTest extends AbstractJpaIntegrationTest { final Rollout rollout = testdataFactory.createRolloutByVariables(rolloutName, rolloutName, amountGroups, "controllerid==" + targetPrefix + "*", distributionSet, "60", "30", false, false); assertPermissions(() -> { - rolloutManagement.setRolloutStatusDetails(new PageImpl<>(List.of(rollout))); + rolloutManagement.getRolloutWithStatusDetails(new PageImpl<>(List.of(rollout))); return null; - }, List.of(SpPermission.UPDATE_ROLLOUT, SpPermission.READ_REPOSITORY)); + }, List.of(SpPermission.READ_ROLLOUT, SpPermission.READ_REPOSITORY)); } @Test