diff --git a/bamboo-specs/src/main/java/buildjob/PlanSpec.java b/bamboo-specs/src/main/java/buildjob/PlanSpec.java index 62a0490e9..122953354 100644 --- a/bamboo-specs/src/main/java/buildjob/PlanSpec.java +++ b/bamboo-specs/src/main/java/buildjob/PlanSpec.java @@ -95,7 +95,7 @@ public class PlanSpec { .enabled(true), new InjectVariablesTask().description("Inject git Tag").path("git.tag").namespace("g").scope(InjectVariablesScope.LOCAL), new VcsTagTask().description("${bamboo.g.gitTag}").tagName("${bamboo.g.gitTag}").defaultRepository()) - .dockerConfiguration(new DockerConfiguration().image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") + .dockerConfiguration(new DockerConfiguration().image("nexus.knecon.com:5001/infra/maven:3.8.4-openjdk-17-slim") .dockerRunArguments("--net=host") .volume("/etc/maven/settings.xml", "/usr/share/maven/ref/settings.xml") .volume("/var/run/docker.sock", "/var/run/docker.sock")))) @@ -114,7 +114,7 @@ public class PlanSpec { .inlineBody("#!/bin/bash\n" + "set -e\n" + "rm -rf ./*"), new VcsCheckoutTask().description("Checkout Default Repository").cleanCheckout(true).checkoutItems(new CheckoutItem().defaultRepository()), new ScriptTask().description("Sonar").location(Location.FILE).fileFromPath("bamboo-specs/src/main/resources/scripts/sonar-java.sh").argument(SERVICE_NAME)) - .dockerConfiguration(new DockerConfiguration().image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") + .dockerConfiguration(new DockerConfiguration().image("nexus.knecon.com:5001/infra/maven:3.8.4-openjdk-17-slim") .dockerRunArguments("--net=host") .volume("/etc/maven/settings.xml", "/usr/share/maven/conf/settings.xml") .volume("/var/run/docker.sock", "/var/run/docker.sock")))) diff --git a/bamboo-specs/src/main/resources/scripts/build-java.sh b/bamboo-specs/src/main/resources/scripts/build-java.sh index f0ecab326..1180a4d62 100755 --- a/bamboo-specs/src/main/resources/scripts/build-java.sh +++ b/bamboo-specs/src/main/resources/scripts/build-java.sh @@ -48,7 +48,7 @@ mvn -f ${bamboo_build_working_directory}/$SERVICE_NAME-v1/pom.xml \ -Dmaven.wagon.http.ssl.insecure=true \ -Dmaven.wagon.http.ssl.allowall=true \ -Dmaven.wagon.http.ssl.ignore.validity.dates=true \ - -DaltDeploymentRepository=iqser_release::default::https://nexus.iqser.com/repository/red-platform-releases + -DaltDeploymentRepository=iqser_release::default::https://nexus.knecon.com/repository/red-platform-releases mvn --no-transfer-progress \ -f ${bamboo_build_working_directory}/$SERVICE_NAME-image-v1/pom.xml \ diff --git a/bamboo-specs/src/main/resources/scripts/sonar-java.sh b/bamboo-specs/src/main/resources/scripts/sonar-java.sh index dfbcf26c4..56129adcd 100755 --- a/bamboo-specs/src/main/resources/scripts/sonar-java.sh +++ b/bamboo-specs/src/main/resources/scripts/sonar-java.sh @@ -22,7 +22,7 @@ then -f ${bamboo_build_working_directory}/$SERVICE_NAME-v1/pom.xml \ sonar:sonar \ -Dsonar.projectKey=RED_$SERVICE_NAME \ - -Dsonar.host.url=https://sonarqube.iqser.com \ + -Dsonar.host.url=https://sonarqube.knecon.com \ -Dsonar.login=${bamboo_sonarqube_api_token_secret} \ -Dsonar.branch.name=${bamboo_planRepository_1_branch} \ -Dsonar.dependencyCheck.jsonReportPath=target/dependency-check-report.json \ @@ -34,7 +34,7 @@ else -f ${bamboo_build_working_directory}/$SERVICE_NAME-v1/pom.xml \ sonar:sonar \ -Dsonar.projectKey=RED_$SERVICE_NAME \ - -Dsonar.host.url=https://sonarqube.iqser.com \ + -Dsonar.host.url=https://sonarqube.knecon.com \ -Dsonar.login=${bamboo_sonarqube_api_token_secret} \ -Dsonar.pullrequest.key=${bamboo_repository_pr_key} \ -Dsonar.pullrequest.branch=${bamboo_repository_pr_sourceBranch} \ diff --git a/persistence-service-image-v1/pom.xml b/persistence-service-image-v1/pom.xml index 33eb413d3..4fbea8408 100644 --- a/persistence-service-image-v1/pom.xml +++ b/persistence-service-image-v1/pom.xml @@ -3,9 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - com.iqser.red + com.knecon.fforesight platform-docker-dependency - 1.2.0 + 0.1.0 4.0.0 diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java index e8149cbbb..93648210a 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java @@ -159,24 +159,7 @@ public class StatusController implements StatusResource { log.debug("Requested [setFileReviewer] for dossier: {} / file: {} / reviewer: {}", dossierId, fileId, assigneeId); - if (assigneeId != null) { - var user = userService.getUserById(assigneeId); - if (user.isEmpty()) { - userService.removeDeletedUsers(Collections.singleton(assigneeId)); - throw new BadRequestException("Unknown user=" + assigneeId); - } - // check he has a manager role, thus he can be the owner - if (user.get().getRoles().stream().noneMatch(VALID_MEMBER_ROLES::contains)) { - throw new BadRequestException("Make sure each provided member id has the permission to be a member of a dossier."); - } - // check assignee is a member - accessControlService.verifyUserIsMemberOrApprover(dossierId, assigneeId); - } else { - // check if file is already unassigned (cannot unassign an unassigned file) - if (fileStatusManagementService.getFileStatus(fileId).getAssignee() == null) { - throw new BadRequestException("File is already unassigned!"); - } - } + validateAssignee(dossierId, fileId, assigneeId); var fileStatus = fileStatusManagementService.getFileStatus(fileId); @@ -222,6 +205,30 @@ public class StatusController implements StatusResource { } + + private void validateAssignee(String dossierId, String fileId, String assigneeId) { + + if (assigneeId != null) { + var user = userService.getUserById(assigneeId); + if (user.isEmpty()) { + userService.removeDeletedUsers(Collections.singleton(assigneeId)); + throw new BadRequestException("Unknown user=" + assigneeId); + } + // check he has a manager role, thus he can be the owner + if (user.get().getRoles().stream().noneMatch(VALID_MEMBER_ROLES::contains)) { + throw new BadRequestException("Make sure each provided member id has the permission to be a member of a dossier."); + } + // check assignee is a member + accessControlService.verifyUserIsMemberOrApprover(dossierId, assigneeId); + } else { + // check if file is already unassigned (cannot unassign an unassigned file) + if (fileStatusManagementService.getFileStatus(fileId).getAssignee() == null) { + throw new BadRequestException("File is already unassigned!"); + } + } + } + + @PreAuthorize("hasAuthority('" + SET_REVIEWER + "')") public void setStatusUnderReview(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @@ -330,7 +337,7 @@ public class StatusController implements StatusResource { private void setStatusUnderReviewForFile(String dossierId, String fileId, String assigneeId) { - accessControlService.verifyUserIsMemberOrApprover(dossierId); + validateAssignee(dossierId, fileId, assigneeId); fileStatusManagementService.setStatusUnderReview(dossierId, fileId, assigneeId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java index 8dcb83355..a75980c6f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java @@ -349,13 +349,16 @@ public class UserService { public Optional getUserById(String userId) { - return userListingService.getAllUsers(TenantContext.getTenantId()).stream().filter(u -> u.getUserId().equalsIgnoreCase(userId)).findAny(); + return this.getAllUsers().stream().filter(u -> u.getUserId().equalsIgnoreCase(userId)).findAny(); + } + + public Optional getOptionalUserByUsername(String username) { + return this.getAllUsers().stream().filter(u -> u.getUsername().contains(username)).findFirst(); } public List getUsersByIds(Collection userIds) { - - return userListingService.getAllUsers(TenantContext.getTenantId()).stream().filter(u -> userIds.contains(u.getUserId())).collect(Collectors.toList()); + return this.getAllUsers().stream().filter(u -> userIds.contains(u.getUserId())).collect(Collectors.toList()); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java index 0420e2d86..9408b1b32 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java @@ -12,20 +12,24 @@ public class UserProvider { private UserService userService; public String getUserId(){ - var allUsers = userService.getAllUsers(); - var managerAdmin = allUsers.stream().filter(u -> u.getUsername().contains("manageradmin1")).findFirst(); - if(managerAdmin.isPresent()){ - return managerAdmin.get().getUserId(); - } - throw new RuntimeException("user not created"); + return this.getUserIdByUsername("manageradmin1"); } public String getAltUserId(){ - var allUsers = userService.getAllUsers(); - var managerAdmin = allUsers.stream().filter(u -> u.getUsername().contains("manageradmin2")).findFirst(); - if(managerAdmin.isPresent()){ - return managerAdmin.get().getUserId(); + return this.getUserIdByUsername("manageradmin2"); + } + + + public String getMemberUserId(){ + return this.getUserIdByUsername("user"); + } + + private String getUserIdByUsername(String username) { + var userOptional = userService.getOptionalUserByUsername(username); + if(userOptional.isPresent()){ + return userOptional.get().getUserId(); } - throw new RuntimeException("user not created"); + throw new RuntimeException("user " + username + " not created"); + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index a463bd8e2..a9c57a057 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -9,6 +9,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -31,6 +32,7 @@ import com.iqser.red.service.peristence.v1.server.integration.service.FileTester import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider; import com.iqser.red.service.peristence.v1.server.integration.service.UserProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttributes; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttributesConfig; import com.iqser.red.service.persistence.service.v1.api.shared.model.PageExclusionRequest; @@ -47,6 +49,8 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.Imag import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.LegalBasisChangeRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequest; +import feign.FeignException; + public class FileTest extends AbstractPersistenceServerServiceTest { @Autowired @@ -480,11 +484,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest { var userId = userProvider.getUserId(); var altUserId = userProvider.getAltUserId(); - // update dossier - add new member - CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); - BeanUtils.copyProperties(dossier, cru); - cru.getMemberIds().add(altUserId); - var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getAssignee()).isNull(); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW); @@ -521,4 +520,49 @@ public class FileTest extends AbstractPersistenceServerServiceTest { } + @Test + public void testFile6034SetUnderReview() { + + var start = OffsetDateTime.now(); + var dossier = dossierTesterAndProvider.provideTestDossier(); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + var userId = userProvider.getUserId(); + var altUserId = userProvider.getAltUserId(); + var user2 = userProvider.getMemberUserId(); + + assertThat(dossier.getMemberIds().contains(user2)).isFalse(); + + var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getAssignee()).isNull(); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW); + assertThat(loadedFile.getLastReviewer()).isNull(); + assertThat(loadedFile.getLastApprover()).isNull(); + + Exception exception = Assertions.assertThrows(FeignException.BadRequest.class, () -> { + fileClient.setStatusUnderReview(dossier.getId(), file.getId(), null); + }); + + String expectedMessage = "File is already unassigned!"; + String actualMessage = exception.getMessage(); + + assertThat(actualMessage).contains(expectedMessage); + + + exception = Assertions.assertThrows(FeignException.Forbidden.class, () -> { + fileClient.setStatusUnderReview(dossier.getId(), file.getId(), user2); + }); + + expectedMessage = "User must be dossier member"; + actualMessage = exception.getMessage(); + + assertThat(actualMessage).contains(expectedMessage); + + + fileClient.setStatusUnderReview(dossier.getId(), file.getId(), altUserId); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW); + assertThat(loadedFile.getAssignee()).isEqualTo(altUserId); + assertThat(loadedFile.getLastReviewer()).isNull(); + assertThat(loadedFile.getLastApprover()).isNull(); + } }