RED-3450 Added digital kms signature

This commit is contained in:
Philipp Schramm 2022-03-24 08:13:50 +01:00
parent 9f414b2d0b
commit 33876b761d
21 changed files with 523 additions and 41 deletions

View File

@ -12,7 +12,7 @@
<artifactId>persistence-service-image-v1</artifactId>
<groupId>com.iqser.red.service</groupId>
<version>1.0-SNAPSHOT</version>
<version>Banana</version>
<packaging>pom</packaging>
<properties>

View File

@ -6,7 +6,7 @@
<parent>
<artifactId>persistence-service-v1</artifactId>
<groupId>com.iqser.red.service</groupId>
<version>1.0-SNAPSHOT</version>
<version>Banana</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -0,0 +1,30 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DigitalSignatureKms {
@NonNull
private String certificateName;
@NonNull
private String kmsKeyId;
@NonNull
private String kmsServiceEndpoint;
@NonNull
private String kmsRegion;
@NonNull
private String kmsAccessKey;
@NonNull
private String kmsSecretKey;
@NonNull
private byte[] certificate;
}

View File

@ -0,0 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration;
public enum DigitalSignatureType {
CERTIFICATE, KMS, HSM;
}

View File

@ -1,28 +1,69 @@
package com.iqser.red.service.persistence.service.v1.api.resources;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
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;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureKms;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureType;
@ResponseStatus(value = HttpStatus.OK)
public interface DigitalSignatureResource {
String DIGITAL_SIGNATURE_PATH = "/digital-signature";
String DIGITAL_SIGNATURE_TYPE_PATH = DIGITAL_SIGNATURE_PATH + "/type";
String DIGITAL_SIGNATURE_KMS_PATH = DIGITAL_SIGNATURE_PATH + "/kms";
String DIGITAL_SIGNATURE_TYPE = "digitalSignatureType";
String DIGITAL_SIGNATURE_TYPE_VARIABLE = "/{" + DIGITAL_SIGNATURE_TYPE + "}";
@GetMapping(value = DIGITAL_SIGNATURE_TYPE_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
DigitalSignatureType getActiveDigitalSignatureType();
@ResponseStatus(HttpStatus.NO_CONTENT)
@PostMapping(value = DIGITAL_SIGNATURE_TYPE_PATH + DIGITAL_SIGNATURE_TYPE_VARIABLE)
void setActiveDigitalSignatureType(@PathVariable(DIGITAL_SIGNATURE_TYPE) DigitalSignatureType digitalSignatureType);
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = DIGITAL_SIGNATURE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
DigitalSignature saveDigitalSignature(@RequestBody DigitalSignature digitalSignatureModel);
@ResponseStatus(HttpStatus.CREATED)
@PutMapping(value = DIGITAL_SIGNATURE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
void updateDigitalSignature(@RequestBody DigitalSignature digitalSignatureModel);
@GetMapping(value = DIGITAL_SIGNATURE_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
DigitalSignature getDigitalSignature();
@ResponseStatus(HttpStatus.NO_CONTENT)
@DeleteMapping(value = DIGITAL_SIGNATURE_PATH)
void deleteDigitalSignature();
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = DIGITAL_SIGNATURE_KMS_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
DigitalSignatureKms saveDigitalSignatureKms(@RequestBody DigitalSignatureKms digitalSignature);
@GetMapping(value = DIGITAL_SIGNATURE_KMS_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
DigitalSignatureKms getDigitalSignatureKms();
@ResponseStatus(HttpStatus.NO_CONTENT)
@DeleteMapping(value = DIGITAL_SIGNATURE_KMS_PATH)
void deleteDigitalSignatureKms();
}

View File

@ -6,7 +6,7 @@
<parent>
<artifactId>persistence-service-v1</artifactId>
<groupId>com.iqser.red.service</groupId>
<version>1.0-SNAPSHOT</version>
<version>Banana</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -0,0 +1,45 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import com.iqser.red.service.persistence.service.v1.api.utils.SuppressFBWarnings;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "digital_signature_kms")
@SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE")
public class DigitalSignatureKmsEntity {
public final static String ID = "CONFIG_ID";
@Id
private final String id = DigitalSignatureKmsEntity.ID;
@Column
private String certificateName;
@Column
private String kmsKeyId;
@Column
private String kmsServiceEndpoint;
@Column
private String kmsRegion;
@Column
private String kmsAccessKey;
@Column
private String kmsSecretKey;
@Column
@Lob
private byte[] certificate;
}

View File

@ -0,0 +1,36 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Table;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureType;
import com.iqser.red.service.persistence.service.v1.api.utils.SuppressFBWarnings;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "digital_signature_type")
@SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE")
public class DigitalSignatureTypeEntity {
public final static String ID = "CONFIG_ID";
@Id
private final String id = DigitalSignatureTypeEntity.ID;
@Column
@Enumerated(EnumType.STRING)
private DigitalSignatureType digitalSignatureType;
}

View File

@ -0,0 +1,78 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureKmsEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureKmsRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureKms;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
public class DigitalSignatureKmsService {
private final EncryptionDecryptionService encryptionDecryptionService;
private final DigitalSignatureKmsRepository digitalSignatureKmsRepository;
private final DigitalSignatureTypeService digitalSignatureTypeService;
private final PDFTronRedactionClient pdfTronRedactionClient;
public DigitalSignatureKmsEntity saveDigitalSignature(DigitalSignatureKmsEntity digitalSignature) {
log.info("Validate digital KMS signature before saving");
pdfTronRedactionClient.testDigitalSignatureKms(convert(digitalSignature, DigitalSignatureKms.class));
log.info("Digital KMS signature is valid");
encrypt(digitalSignature);
var result = digitalSignatureKmsRepository.save(digitalSignature);
digitalSignatureTypeService.setActiveDigitalSignatureType(DigitalSignatureType.KMS);
decrypt(result);
return result;
}
public DigitalSignatureKmsEntity getDigitalSignature() {
return digitalSignatureKmsRepository.findById(DigitalSignatureKmsEntity.ID).map(digitalSignature -> {
DigitalSignatureKmsEntity result = new DigitalSignatureKmsEntity();
BeanUtils.copyProperties(digitalSignature, result);
decrypt(result);
return result;
}).orElseThrow(() -> new NotFoundException("Digital KMS Signature Not found"));
}
public void deleteDigitalSignature() {
digitalSignatureKmsRepository.deleteById(DigitalSignatureEntity.ID);
}
private void encrypt(DigitalSignatureKmsEntity digitalSignature) {
digitalSignature.setCertificate(encryptionDecryptionService.encrypt(digitalSignature.getCertificate()));
digitalSignature.setKmsKeyId(encryptionDecryptionService.encrypt(digitalSignature.getKmsKeyId()));
digitalSignature.setKmsAccessKey(encryptionDecryptionService.encrypt(digitalSignature.getKmsAccessKey()));
digitalSignature.setKmsSecretKey(encryptionDecryptionService.encrypt(digitalSignature.getKmsSecretKey()));
}
private void decrypt(DigitalSignatureKmsEntity digitalSignature) {
digitalSignature.setCertificate(encryptionDecryptionService.decrypt(digitalSignature.getCertificate()));
digitalSignature.setKmsKeyId(encryptionDecryptionService.decrypt(digitalSignature.getKmsKeyId()));
digitalSignature.setKmsAccessKey(encryptionDecryptionService.decrypt(digitalSignature.getKmsAccessKey()));
digitalSignature.setKmsSecretKey(encryptionDecryptionService.decrypt(digitalSignature.getKmsSecretKey()));
}
}

View File

@ -1,20 +1,22 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import javax.transaction.Transactional;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
@Slf4j
@Service
@ -24,12 +26,17 @@ public class DigitalSignatureService {
private final EncryptionDecryptionService encryptionDecryptionService;
private final DigitalSignatureRepository digitalSignatureRepository;
private final PDFTronRedactionClient pdfTronRedactionClient;
private final DigitalSignatureTypeService digitalSignatureTypeService;
public void deleteDigitalSignature() {
digitalSignatureRepository.deleteById(DigitalSignatureEntity.ID);
}
public DigitalSignatureEntity getDigitalSignature() {
return digitalSignatureRepository.findById(DigitalSignatureEntity.ID).map(digitalSignature -> {
DigitalSignatureEntity result = new DigitalSignatureEntity();
BeanUtils.copyProperties(digitalSignature, result);
@ -39,6 +46,7 @@ public class DigitalSignatureService {
}).orElseThrow(() -> new NotFoundException("Digital Signature Not found"));
}
public DigitalSignatureEntity saveDigitalSignature(DigitalSignatureEntity digitalSignature) {
try {
@ -49,23 +57,21 @@ public class DigitalSignatureService {
digitalSignature.setPrivateKey(encryptionDecryptionService.encrypt(digitalSignature.getPrivateKey()));
digitalSignature.setPassword(encryptionDecryptionService.encrypt(digitalSignature.getPassword()));
return digitalSignatureRepository.save(digitalSignature);
var result = digitalSignatureRepository.save(digitalSignature);
digitalSignatureTypeService.setActiveDigitalSignatureType(DigitalSignatureType.CERTIFICATE);
return result;
}
@Transactional
public void updateDigitalSignature(DigitalSignatureEntity digitalSignatureModel) {
int updateCount = digitalSignatureRepository.updateDigitalSignature(DigitalSignatureEntity.ID,
digitalSignatureModel.getReason(),
digitalSignatureModel.getLocation(),
digitalSignatureModel.getContactInfo(),
digitalSignatureModel.getCertificateName());
int updateCount = digitalSignatureRepository.updateDigitalSignature(DigitalSignatureEntity.ID, digitalSignatureModel.getReason(), digitalSignatureModel.getLocation(), digitalSignatureModel.getContactInfo(), digitalSignatureModel.getCertificateName());
if (updateCount == 0) {
throw new NotFoundException("Digital Signature Not found");
}
digitalSignatureTypeService.setActiveDigitalSignatureType(DigitalSignatureType.CERTIFICATE);
}
}

View File

@ -0,0 +1,34 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureTypeEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureTypeRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
public class DigitalSignatureTypeService {
private final DigitalSignatureTypeRepository digitalSignatureTypeRepository;
public DigitalSignatureType getActiveDigitalSignatureType() {
return digitalSignatureTypeRepository.findById(DigitalSignatureTypeEntity.ID)
.map(DigitalSignatureTypeEntity::getDigitalSignatureType)
.orElseThrow(() -> new NotFoundException("Digital Signature Type is not defined"));
}
public void setActiveDigitalSignatureType(DigitalSignatureType digitalSignatureType) {
digitalSignatureTypeRepository.save(DigitalSignatureTypeEntity.builder().digitalSignatureType(digitalSignatureType).build());
}
}

View File

@ -0,0 +1,9 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureKmsEntity;
public interface DigitalSignatureKmsRepository extends JpaRepository<DigitalSignatureKmsEntity, String> {
}

View File

@ -0,0 +1,9 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureTypeEntity;
public interface DigitalSignatureTypeRepository extends JpaRepository<DigitalSignatureTypeEntity, String> {
}

View File

@ -6,7 +6,7 @@
<parent>
<artifactId>persistence-service-v1</artifactId>
<groupId>com.iqser.red.service</groupId>
<version>1.0-SNAPSHOT</version>
<version>Banana</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -22,10 +22,22 @@
<dependency>
<groupId>com.iqser.red.service</groupId>
<artifactId>search-service-api-v1</artifactId>
<exclusions>
<exclusion>
<groupId>com.iqser.red.service</groupId>
<artifactId>pdftron-redaction-service-api-v1</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.iqser.red.service</groupId>
<artifactId>redaction-report-service-api-v1</artifactId>
<exclusions>
<exclusion>
<groupId>com.iqser.red.service</groupId>
<artifactId>pdftron-redaction-service-api-v1</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.iqser.red.service</groupId>
@ -35,6 +47,10 @@
<groupId>com.iqser.red.service</groupId>
<artifactId>persistence-service-api-v1</artifactId>
</exclusion>
<exclusion>
<groupId>com.iqser.red.service</groupId>
<artifactId>pdftron-redaction-service-api-v1</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>

View File

@ -1,40 +1,96 @@
package com.iqser.red.service.peristence.v1.server.controller;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.DigitalSignatureService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature;
import com.iqser.red.service.persistence.service.v1.api.resources.DigitalSignatureResource;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
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.persistence.management.v1.processor.entity.configuration.DigitalSignatureEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureKmsEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.DigitalSignatureKmsService;
import com.iqser.red.service.persistence.management.v1.processor.service.DigitalSignatureService;
import com.iqser.red.service.persistence.management.v1.processor.service.DigitalSignatureTypeService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureKms;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureType;
import com.iqser.red.service.persistence.service.v1.api.resources.DigitalSignatureResource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequiredArgsConstructor
public class DigitalSignatureController implements DigitalSignatureResource {
private final DigitalSignatureTypeService digitalSignatureTypeService;
private final DigitalSignatureService digitalSignatureService;
private final DigitalSignatureKmsService digitalSignatureKmsService;
@Override
public DigitalSignatureType getActiveDigitalSignatureType() {
return digitalSignatureTypeService.getActiveDigitalSignatureType();
}
@Override
public void setActiveDigitalSignatureType(@PathVariable(DIGITAL_SIGNATURE_TYPE) DigitalSignatureType digitalSignatureType) {
digitalSignatureTypeService.setActiveDigitalSignatureType(digitalSignatureType);
}
@Override
public DigitalSignature saveDigitalSignature(@RequestBody DigitalSignature digitalSignature) {
return convert(digitalSignatureService.saveDigitalSignature(convert(digitalSignature, DigitalSignatureEntity.class)), DigitalSignature.class);
}
@Override
public void updateDigitalSignature(@RequestBody DigitalSignature digitalSignature) {
digitalSignatureService.updateDigitalSignature(convert(digitalSignature, DigitalSignatureEntity.class));
}
@Override
public DigitalSignature getDigitalSignature() {
return convert(digitalSignatureService.getDigitalSignature(), DigitalSignature.class);
}
@Override
public void deleteDigitalSignature() {
digitalSignatureService.deleteDigitalSignature();
}
@Override
public DigitalSignatureKms saveDigitalSignatureKms(@RequestBody DigitalSignatureKms digitalSignature) {
return convert(digitalSignatureKmsService.saveDigitalSignature(convert(digitalSignature, DigitalSignatureKmsEntity.class)), DigitalSignatureKms.class);
}
@Override
public DigitalSignatureKms getDigitalSignatureKms() {
return convert(digitalSignatureKmsService.getDigitalSignature(), DigitalSignatureKms.class);
}
@Override
public void deleteDigitalSignatureKms() {
digitalSignatureKmsService.deleteDigitalSignature();
}
}

View File

@ -0,0 +1,49 @@
databaseChangeLog:
- changeSet:
id: add-digital-signature-kms
author: philipp
changes:
- createTable:
columns:
- column:
constraints:
nullable: false
primaryKey: true
primaryKeyName: digital_signature_type_pkey
name: id
type: VARCHAR(255)
- column:
name: digital_signature_type
type: VARCHAR(255)
tableName: digital_signature_type
- createTable:
columns:
- column:
constraints:
nullable: false
primaryKey: true
primaryKeyName: digital_signature_kms_pkey
name: id
type: VARCHAR(255)
- column:
name: certificate_name
type: VARCHAR(255)
- column:
name: kms_key_id
type: VARCHAR(255)
- column:
name: kms_service_endpoint
type: VARCHAR(255)
- column:
name: kms_region
type: VARCHAR(255)
- column:
name: kms_access_key
type: VARCHAR(255)
- column:
name: kms_secret_key
type: VARCHAR(255)
- column:
name: certificate
type: OID
tableName: digital_signature_kms

View File

@ -37,5 +37,5 @@ databaseChangeLog:
file: db/changelog/14-add-redaction-source-id.changelog.yaml
- include:
file: db/changelog/15-dossier-remove-dossier-state.changelog.yaml
- include:
file: db/changelog/16-digital-signature-kms.changelog.yaml

View File

@ -1,20 +1,27 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import static org.assertj.core.api.Assertions.assertThat;
import java.nio.file.Files;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import com.iqser.red.service.peristence.v1.server.integration.client.DigitalSignatureClient;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignatureKms;
import feign.FeignException;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import static org.assertj.core.api.Assertions.assertThat;
import lombok.SneakyThrows;
public class DigitalSignatureTest extends AbstractPersistenceServerServiceTest {
@Autowired
private DigitalSignatureClient digitalSignatureClient;
@Test
public void testDigitalSignature() {
@ -39,13 +46,11 @@ public class DigitalSignatureTest extends AbstractPersistenceServerServiceTest {
assertThat(savedDigitalSignature.getPassword()).isNotEqualTo(loadedSignature.getPassword());
assertThat(savedDigitalSignature.getPrivateKey()).isNotEqualTo(loadedSignature.getPrivateKey());
digitalSignature.setReason("new test");
digitalSignatureClient.updateDigitalSignature(digitalSignature);
loadedSignature = digitalSignatureClient.getDigitalSignature();
assertThat(loadedSignature.getReason()).isEqualTo("new test");
digitalSignatureClient.deleteDigitalSignature();
try {
digitalSignatureClient.getDigitalSignature();
@ -53,6 +58,69 @@ public class DigitalSignatureTest extends AbstractPersistenceServerServiceTest {
assertThat(e.status()).isEqualTo(404);
}
}
@Test
@SneakyThrows
public void testDigitalSignatureKms() {
// Arrange
final String certificateName = "certificateName";
final String kmsKeyId = "kmsKeyId";
final String kmsAccessKey = "kmsAccessKey";
final String kmsRegion = "kmsRegion";
final String kmsSecretKey = "kmsSecretKey";
final String kmsServiceEndpoint = "kmsServiceEndpoint";
final byte[] certificate = Files.readAllBytes(new ClassPathResource("files/TestCert.cer").getFile().toPath());
DigitalSignatureKms digitalSignature = DigitalSignatureKms.builder()
.certificateName(certificateName)
.kmsKeyId(kmsKeyId)
.kmsAccessKey(kmsAccessKey)
.kmsRegion(kmsRegion)
.kmsSecretKey(kmsSecretKey)
.kmsServiceEndpoint(kmsServiceEndpoint)
.certificate(certificate)
.build();
// Act and Assert: Get not existing
try {
digitalSignatureClient.getDigitalSignatureKms();
} catch (FeignException.FeignClientException e) {
assertThat(e.status()).isEqualTo(404);
}
// Act and Assert: Save
var savedDigitalSignature = digitalSignatureClient.saveDigitalSignatureKms(digitalSignature);
assertThat(savedDigitalSignature.getKmsAccessKey()).isEqualTo(digitalSignature.getKmsAccessKey());
assertThat(savedDigitalSignature.getKmsKeyId()).isEqualTo(digitalSignature.getKmsKeyId());
assertThat(savedDigitalSignature.getKmsRegion()).isEqualTo(digitalSignature.getKmsRegion());
assertThat(savedDigitalSignature.getKmsSecretKey()).isEqualTo(digitalSignature.getKmsSecretKey());
assertThat(savedDigitalSignature.getCertificateName()).isEqualTo(digitalSignature.getCertificateName());
assertThat(savedDigitalSignature.getKmsServiceEndpoint()).isEqualTo(digitalSignature.getKmsServiceEndpoint());
assertThat(savedDigitalSignature.getCertificate()).isEqualTo(digitalSignature.getCertificate());
// Act and Assert: Get existing
var loadedDigitalSignature = digitalSignatureClient.getDigitalSignatureKms();
assertThat(loadedDigitalSignature.getKmsAccessKey()).isEqualTo(digitalSignature.getKmsAccessKey());
assertThat(loadedDigitalSignature.getKmsKeyId()).isEqualTo(digitalSignature.getKmsKeyId());
assertThat(loadedDigitalSignature.getKmsRegion()).isEqualTo(digitalSignature.getKmsRegion());
assertThat(loadedDigitalSignature.getKmsSecretKey()).isEqualTo(digitalSignature.getKmsSecretKey());
assertThat(loadedDigitalSignature.getCertificateName()).isEqualTo(digitalSignature.getCertificateName());
assertThat(loadedDigitalSignature.getKmsServiceEndpoint()).isEqualTo(digitalSignature.getKmsServiceEndpoint());
assertThat(loadedDigitalSignature.getCertificate()).isEqualTo(digitalSignature.getCertificate());
// Act and Assert: Delete
digitalSignatureClient.deleteDigitalSignatureKms();
try {
digitalSignatureClient.getDigitalSignatureKms();
} catch (FeignException.FeignClientException e) {
assertThat(e.status()).isEqualTo(404);
}
}
}

View File

@ -14,7 +14,7 @@
<groupId>com.iqser.red.service</groupId>
<artifactId>persistence-service-v1</artifactId>
<version>1.0-SNAPSHOT</version>
<version>Banana</version>
<packaging>pom</packaging>
@ -27,7 +27,7 @@
<properties>
<redaction-service.version>3.76.0</redaction-service.version>
<search-service.version>2.26.0</search-service.version>
<pdftron-redaction-service.version>3.44.0</pdftron-redaction-service.version>
<pdftron-redaction-service.version>Apple</pdftron-redaction-service.version><!-- TODO PSC Versions -->
<redaction-report-service.version>3.19.0</redaction-report-service.version>
</properties>

View File

@ -7,7 +7,7 @@
<artifactId>persistence-service</artifactId>
<groupId>com.iqser.red.service</groupId>
<version>1.0-SNAPSHOT</version>
<version>Banana</version>
<packaging>pom</packaging>