RED-3450 Added digital kms signature
This commit is contained in:
parent
9f414b2d0b
commit
33876b761d
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration;
|
||||
|
||||
public enum DigitalSignatureType {
|
||||
CERTIFICATE, KMS, HSM;
|
||||
}
|
||||
@ -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();
|
||||
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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()));
|
||||
}
|
||||
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
@ -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> {
|
||||
|
||||
}
|
||||
@ -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> {
|
||||
|
||||
}
|
||||
@ -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>
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Binary file not shown.
@ -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>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user