From 6b639b00782cbbc8f6e42634310e440664fc1014 Mon Sep 17 00:00:00 2001 From: deiflaender Date: Fri, 23 Sep 2022 10:48:50 +0200 Subject: [PATCH] RED-3925: Implemented logic to get deploymentKey --- .../v1/api/resources/TenantsResource.java | 7 ++++ .../server/controller/TenantsController.java | 12 ++++++ .../server/service/DeploymentKeyService.java | 40 +++++++++++++++++++ .../service/TenantManagementService.java | 7 ++++ .../integration/tests/DeploymentKeyTest.java | 24 +++++++++++ 5 files changed, 90 insertions(+) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DeploymentKeyService.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DeploymentKeyTest.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/TenantsResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/TenantsResource.java index e526d7e82..9d1239333 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/TenantsResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/TenantsResource.java @@ -5,15 +5,20 @@ import java.util.List; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseStatus; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.multitenancy.Tenant; @ResponseStatus(value = HttpStatus.OK) public interface TenantsResource { + String TENANT_ID_PARAM = "tenantId"; + String TENANT_ID_PATH_PARAM = "/{" + TENANT_ID_PARAM + "}"; + @PostMapping(value = "/tenants", consumes = MediaType.APPLICATION_JSON_VALUE) void createTenant(@RequestBody Tenant tenant); @@ -21,4 +26,6 @@ public interface TenantsResource { @GetMapping(value = "/tenants", produces = MediaType.APPLICATION_JSON_VALUE) List getTenants(); + @GetMapping(value = "/deploymentKey" + TENANT_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) + JSONPrimitive getDeploymentKey(@PathVariable(TENANT_ID_PARAM) String tenantId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/TenantsController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/TenantsController.java index e94536d19..aac23a0cc 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/TenantsController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/TenantsController.java @@ -2,10 +2,13 @@ package com.iqser.red.service.peristence.v1.server.controller; import java.util.List; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import com.iqser.red.service.peristence.v1.server.service.DeploymentKeyService; import com.iqser.red.service.peristence.v1.server.service.TenantManagementService; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.multitenancy.Tenant; import com.iqser.red.service.persistence.service.v1.api.resources.TenantsResource; @@ -16,6 +19,9 @@ import lombok.RequiredArgsConstructor; public class TenantsController implements TenantsResource { private final TenantManagementService tenantManagementService; + private final DeploymentKeyService deploymentKeyService; + + public void createTenant(@RequestBody Tenant tenant) { @@ -29,4 +35,10 @@ public class TenantsController implements TenantsResource { return tenantManagementService.getTenants(); } + + public JSONPrimitive getDeploymentKey(@PathVariable(TENANT_ID_PARAM) String tenantId){ + + return JSONPrimitive.of(deploymentKeyService.getDeploymentKey(tenantId)); + } + } \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DeploymentKeyService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DeploymentKeyService.java new file mode 100644 index 000000000..08348a37c --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DeploymentKeyService.java @@ -0,0 +1,40 @@ +package com.iqser.red.service.peristence.v1.server.service; + +import java.nio.charset.StandardCharsets; +import java.util.Locale; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hashing; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class DeploymentKeyService { + + private final TenantManagementService tenantManagementService; + + private final HashFunction hashFunction = Hashing.farmHashFingerprint64(); + + @Value("${redaction.kubernetes.id:someValue}") + private String redactionKubernetesId; + + private String hardcodedKey = "89274365-160c-49f2-ab8b-ad83fc43c2e1"; + + + public String getDeploymentKey(String tenantId) { + + var tenant = tenantManagementService.getTenant(tenantId); + + var stringBuilder = new StringBuilder(); + stringBuilder.append(tenant.getGuid()).append(redactionKubernetesId).append(hardcodedKey); + + var deploymentKey = hashFunction.hashString(stringBuilder.toString(), StandardCharsets.UTF_8); + + return deploymentKey.toString().toUpperCase(Locale.ROOT); + } + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java index c9cd9a314..6c90f7a6f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java @@ -15,6 +15,7 @@ import org.springframework.core.io.ResourceLoader; import org.springframework.jdbc.datasource.SingleConnectionDataSource; import org.springframework.stereotype.Service; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.TenantEntity; import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository; @@ -78,6 +79,12 @@ public class TenantManagementService { } + public Tenant getTenant(String tenantId) { + + return tenantRepository.findById(tenantId).map(this::convert).orElseThrow(() -> new NotFoundException("Tenant does not exist")); + } + + private Tenant convert(TenantEntity entity) { return Tenant.builder() diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DeploymentKeyTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DeploymentKeyTest.java new file mode 100644 index 000000000..f853fad4c --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DeploymentKeyTest.java @@ -0,0 +1,24 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.iqser.red.service.peristence.v1.server.integration.client.TenantsClient; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; + +public class DeploymentKeyTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private TenantsClient tenantsClient; + + + @Test + public void testGetDeploymentKey() { + + String deploymentKey = tenantsClient.getDeploymentKey("redaction").getValue(); + assertThat(deploymentKey.length()).isEqualTo(16); + } + +}