From 62fcbc38acd238ea97496dae80018d659b605e51 Mon Sep 17 00:00:00 2001
From: kbeyro <121854496+kbeyro@users.noreply.github.com>
Date: Fri, 20 Sep 2024 14:20:38 +0200
Subject: [PATCH] cherry pick d6830306abf17a5d260396c92427a7e9ef27f1b2
---
.../nmaas/portal/api/bulk/BulkController.java | 78 +++++++++++++++----
1 file changed, 62 insertions(+), 16 deletions(-)
diff --git a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java b/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java
index c42118894..0ae731c41 100644
--- a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java
@@ -14,9 +14,11 @@ import net.geant.nmaas.portal.service.BulkDomainService;
import net.geant.nmaas.portal.service.UserService;
import org.modelmapper.ModelMapper;
import org.springframework.core.io.InputStreamResource;
+import org.springframework.dao.PermissionDeniedDataAccessException;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@@ -30,6 +32,7 @@ import java.security.Principal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.stream.Collectors;
@RestController
@@ -91,17 +94,14 @@ public class BulkController {
@GetMapping
@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN')")
public ResponseEntity<List<BulkDeploymentViewS>> getAllDeploymentRecords() {
- return ResponseEntity.ok(mapToView(bulkDeploymentRepository.findAll()));
+ return ResponseEntity.ok(mapToViewList(bulkDeploymentRepository.findAll()));
}
@GetMapping("/{id}")
@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN') || hasRole('ROLE_VL_MANAGER')")
public ResponseEntity<BulkDeploymentView> getDeploymentRecord(@PathVariable Long id) {
BulkDeployment bulk = bulkDeploymentRepository.findById(id).orElseThrow();
- BulkDeploymentView bulkView = modelMapper.map(bulk, BulkDeploymentView.class);
- bulkView.setCreator(getUserView(bulk.getCreatorId()));
- mapDetails(bulk, bulkView);
- return ResponseEntity.ok(bulkView);
+ return ResponseEntity.ok(mapToView(bulk, BulkDeploymentView.class));
}
@GetMapping(value = "/app/csv/{id}", produces = "text/csv")
@@ -124,7 +124,7 @@ public class BulkController {
@GetMapping("/domains")
@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN')")
public ResponseEntity<List<BulkDeploymentViewS>> getDomainDeploymentRecords() {
- return ResponseEntity.ok(mapToView(bulkDeploymentRepository.findByType(BulkType.DOMAIN)));
+ return ResponseEntity.ok(mapToViewList(bulkDeploymentRepository.findByType(BulkType.DOMAIN)));
}
@GetMapping("/domains/vl")
@@ -132,14 +132,14 @@ public class BulkController {
public ResponseEntity<List<BulkDeploymentViewS>> getDomainDeploymentRecordsRestrictedToOwner(Principal principal) {
User user = this.userService.findByUsername(principal.getName()).orElseThrow(() -> new MissingElementException("Missing user " + principal.getName()));
- return ResponseEntity.ok(mapToView(bulkDeploymentRepository.findByType(BulkType.DOMAIN)).stream()
- .filter(bulk -> bulk.getCreator().getId().equals(user.getId())).collect(Collectors.toList()));
+ return ResponseEntity.ok(mapToViewList(bulkDeploymentRepository.findByType(BulkType.DOMAIN)).stream()
+ .filter(bulk -> bulk.getCreator().getId().equals(user.getId())).collect(Collectors.toList()));
}
@GetMapping("/apps")
@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN')")
public ResponseEntity<List<BulkDeploymentViewS>> getAppDeploymentRecords() {
- return ResponseEntity.ok(mapToView(bulkDeploymentRepository.findByType(BulkType.APPLICATION)));
+ return ResponseEntity.ok(mapToViewList(bulkDeploymentRepository.findByType(BulkType.APPLICATION)));
}
@GetMapping("/apps/vl")
@@ -147,21 +147,67 @@ public class BulkController {
public ResponseEntity<List<BulkDeploymentViewS>> getAppDeploymentRecordsRestrictedToOwner(Principal principal) {
User user = this.userService.findByUsername(principal.getName()).orElseThrow(() -> new MissingElementException("Missing user " + principal.getName()));
- return ResponseEntity.ok(mapToView(bulkDeploymentRepository.findByType(BulkType.APPLICATION)).stream()
+ return ResponseEntity.ok(mapToViewList(bulkDeploymentRepository.findByType(BulkType.APPLICATION)).stream()
.filter(bulk -> bulk.getCreator().getId().equals(user.getId())).collect(Collectors.toList()));
}
+ @DeleteMapping("/{id}")
+ @PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN') || hasRole('ROLE_VL_MANAGER')")
+ public ResponseEntity<Void> removeBulkDeployment(
+ @PathVariable Long id,
+ @RequestParam(name = "removeAll") boolean removeApps,
+ Principal principal
+ ) {
+ User user = this.userService.findByUsername(principal.getName()).orElseThrow(() -> new MissingElementException("Missing user " + principal.getName()));
+
+ Optional<BulkDeployment> bulk = this.bulkDeploymentRepository.findById(id);
+ if (bulk.isEmpty()) {
+ return ResponseEntity.notFound().build();
+ }
+
+ if(bulk.get().getCreatorId().equals(user.getId()) ) {
+ throw new PermissionDeniedDataAccessException("User doesnt have access to this bulk deployment", new Throwable());
+ }
+ if (removeApps) {
+ bulkApplicationService.deleteAppInstancesFromBulk(mapToView(bulk.get(), BulkDeploymentView.class));
+ }
+ bulkDeploymentRepository.delete(bulk.get());
+ return ResponseEntity.ok().build();
+ }
+
+ private List<BulkDeploymentViewS> mapToViewList(List<BulkDeployment> deployments) {
+ return deployments.stream()
+ .map(bulk -> mapToView(bulk, BulkDeploymentViewS.class))
+ .collect(Collectors.toList());
+ }
+
+ @GetMapping("/refresh/{id}")
+ @PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN') || hasRole('ROLE_VL_MANAGER')")
+ public ResponseEntity<BulkDeploymentViewS> getRefreshedState(@PathVariable Long id) {
+ return ResponseEntity.ok(mapToView(this.bulkApplicationService.updateState(id)));
+ }
+
private List<BulkDeploymentViewS> mapToView(List<BulkDeployment> deployments) {
return deployments.stream()
- .map(bulk -> {
- BulkDeploymentViewS bulkView = modelMapper.map(bulk, BulkDeploymentViewS.class);
- bulkView.setCreator(getUserView(bulk.getCreatorId()));
- mapDetails(bulk, bulkView);
- return bulkView;
- })
+ .map(bulk -> mapToView(bulk, BulkDeploymentViewS.class))
.collect(Collectors.toList());
}
+ private <T extends BulkDeploymentViewS> T mapToView(BulkDeployment bulk, Class<T> viewType) {
+ T bulkView = modelMapper.map(bulk, viewType);
+ bulkView.setCreator(getUserView(bulk.getCreatorId()));
+ mapDetails(bulk, bulkView);
+ return bulkView;
+ }
+
+ private BulkDeploymentView mapToView(BulkDeployment deployment) {
+ BulkDeploymentView bulkView = modelMapper.map(deployment, BulkDeploymentView.class);
+ bulkView.setCreator(getUserView(deployment.getCreatorId()));
+ mapDetails(deployment, bulkView);
+ return bulkView;
+
+ }
+
private void mapDetails(BulkDeployment deployment, BulkDeploymentViewS view) {
if (deployment.getType().equals(BulkType.APPLICATION)) {
Map<String, String> details = new HashMap<>();
--
GitLab