Pull request #320: RED-3450 Added digital kms signature

Merge in RED/persistence-service from RED-3450 to master

* commit '56084c6d6e28f8d9a3b02b0dc3337e8da78d582b':
  RED-3450 Changed versions and disabled testing signature for release
  Merge branch 'master' into RED-3450
  RED-3450 Added digital kms signature
This commit is contained in:
Philipp Schramm 2022-03-24 14:52:10 +01:00
commit df63bc570e
34 changed files with 666 additions and 179 deletions

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,14 +1,15 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@ -35,9 +36,11 @@ public class Type {
private boolean hasDictionary;
private boolean systemManaged;
// For auto-mappers
@JsonIgnore
public String getTypeId() {
return this.id;
}

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

@ -1,7 +1,7 @@
package com.iqser.red.service.persistence.service.v1.api.resources;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.SectionGrid;
import java.util.List;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
@ -9,7 +9,8 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import java.util.List;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.SectionGrid;
@ResponseStatus(value = HttpStatus.OK)
public interface RedactionLogResource {
@ -23,6 +24,7 @@ public interface RedactionLogResource {
String DOSSIER_ID_PARAM = "dossierId";
String DOSSIER_ID_PATH_PARAM = "/{" + DOSSIER_ID_PARAM + "}";
@GetMapping(value = REDACTION_LOG_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)
RedactionLog getRedactionLog(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = "excludedType", required = false) List<String> excludedTypes,

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

@ -64,12 +64,12 @@ public class TypeEntity {
private boolean systemManaged;
@Fetch(FetchMode.SUBSELECT)
@BatchSize(size=500)
@BatchSize(size = 500)
@OneToMany(cascade = ALL, mappedBy = "type", orphanRemoval = true, fetch = FetchType.LAZY)
private List<DictionaryEntryEntity> entries = new ArrayList<>();
@Fetch(FetchMode.SUBSELECT)
@BatchSize(size=500)
@BatchSize(size = 500)
@OneToMany(cascade = ALL, mappedBy = "type", orphanRemoval = true, fetch = FetchType.LAZY)
private List<DictionaryFalsePositiveEntryEntity> falsePositiveEntries = new ArrayList<>();

View File

@ -0,0 +1,75 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
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.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

@ -35,7 +35,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType;
import com.iqser.red.storage.commons.service.StorageService;

View File

@ -35,8 +35,9 @@ public class DictionaryPersistenceService {
private final EntryRepository entryRepository;
public TypeEntity addType(String type, String dossierTemplateId, String hexColor, String recommendationHexColor, int rank, boolean isHint, boolean caseInsensitive, boolean isRecommendation,
String description, boolean addToDictionaryAction, String label, String dossierId, boolean hasDictionary, boolean systemManaged) {
public TypeEntity addType(String type, String dossierTemplateId, String hexColor, String recommendationHexColor, int rank, boolean isHint, boolean caseInsensitive,
boolean isRecommendation, String description, boolean addToDictionaryAction, String label, String dossierId, boolean hasDictionary,
boolean systemManaged) {
checkRankAlreadyExists(type, dossierTemplateId, rank, dossierId);

View File

@ -1,5 +1,20 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException;
@ -9,20 +24,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierChange;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE;
@Service
@RequiredArgsConstructor
@ -105,8 +108,7 @@ public class DossierPersistenceService {
public DossierEntity getAndValidateDossier(String dossierId) {
// check whether the dossierId exists and is not deleted
var dossier = findByDossierId(dossierId);
if (dossier == null || dossier.getSoftDeletedTime() != null || dossier.getHardDeletedTime() != null
|| dossier.getArchivedTime() != null) {
if (dossier == null || dossier.getSoftDeletedTime() != null || dossier.getHardDeletedTime() != null || dossier.getArchivedTime() != null) {
throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId));
}
return dossier;

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

@ -1,12 +1,13 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import java.time.OffsetDateTime;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.time.OffsetDateTime;
import java.util.List;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
public interface DossierRepository extends JpaRepository<DossierEntity, String> {

View File

@ -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,5 +1,25 @@
package com.iqser.red.service.peristence.v1.server.controller;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.transaction.Transactional;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.peristence.v1.server.TextNormalizationUtilities;
import com.iqser.red.service.peristence.v1.server.service.StopwordService;
import com.iqser.red.service.peristence.v1.server.validation.DictionaryValidator;
@ -16,26 +36,9 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ty
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type;
import com.iqser.red.service.persistence.service.v1.api.resources.DictionaryResource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toSet;
@RestController
@RequiredArgsConstructor
@ -70,7 +73,7 @@ public class DictionaryController implements DictionaryResource {
// To check whether the type exists, type should not be added into database implicitly by addEntry.
Type typeResult = convert(dictionaryPersistenceService.getType(typeId), Type.class);
if (!typeResult.isHasDictionary()){
if (!typeResult.isHasDictionary()) {
throw new BadRequestException("Entity type does not have a dictionary");
}
@ -205,9 +208,7 @@ public class DictionaryController implements DictionaryResource {
}
String color = typeRequest.getHexColor();
validateColor(color);
return convert(dictionaryPersistenceService.addType(typeRequest.getType(), typeRequest.getDossierTemplateId(), color, typeRequest.getRecommendationHexColor(), typeRequest
.getRank(), typeRequest.isHint(), typeRequest.isCaseInsensitive(), typeRequest.isRecommendation(), typeRequest
.getDescription(), typeRequest.isAddToDictionaryAction(), typeRequest.getLabel(), typeRequest.getDossierId(), typeRequest.isHasDictionary(), typeRequest.isSystemManaged()), Type.class);
return convert(dictionaryPersistenceService.addType(typeRequest.getType(), typeRequest.getDossierTemplateId(), color, typeRequest.getRecommendationHexColor(), typeRequest.getRank(), typeRequest.isHint(), typeRequest.isCaseInsensitive(), typeRequest.isRecommendation(), typeRequest.getDescription(), typeRequest.isAddToDictionaryAction(), typeRequest.getLabel(), typeRequest.getDossierId(), typeRequest.isHasDictionary(), typeRequest.isSystemManaged()), Type.class);
}
@ -216,17 +217,14 @@ public class DictionaryController implements DictionaryResource {
// NotFoundException would be thrown if the type not found in database.
Type typeResult = convert(dictionaryPersistenceService.getType(typeId), Type.class);
if(typeResult.isSystemManaged()){
if (typeResult.isSystemManaged()) {
throw new BadRequestException("Can not delete system managed entity type");
}
var currentVersion = getCurrentVersion(typeResult);
dictionaryPersistenceService.deleteType(typeId);
List<String> existing = entryPersistenceService.getEntries(typeId, DictionaryEntryType.ENTRY, null)
.stream()
.map(BaseDictionaryEntry::getValue)
.collect(toList());
List<String> existing = entryPersistenceService.getEntries(typeId, DictionaryEntryType.ENTRY, null).stream().map(BaseDictionaryEntry::getValue).collect(toList());
entryPersistenceService.deleteEntries(typeId, existing, currentVersion + 1, DictionaryEntryType.ENTRY);
dictionaryPersistenceService.incrementVersion(typeId);

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

@ -1,5 +1,20 @@
package com.iqser.red.service.peristence.v1.server.controller;
import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.peristence.v1.server.service.DossierService;
import com.iqser.red.service.peristence.v1.server.service.FileService;
import com.iqser.red.service.peristence.v1.server.service.FileStatusService;
@ -8,26 +23,17 @@ import com.iqser.red.service.peristence.v1.server.utils.DossierMapper;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.*;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierChange;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierInformation;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.resources.DossierResource;
import com.iqser.red.service.search.v1.model.IndexMessageType;
import feign.Param;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.transaction.Transactional;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
@Slf4j
@RestController

View File

@ -1,15 +1,17 @@
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.peristence.v1.server.service.RedactionLogService;
import com.iqser.red.service.persistence.service.v1.api.resources.RedactionLogResource;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.SectionGrid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import lombok.RequiredArgsConstructor;
@RestController
@RequiredArgsConstructor
@ -18,8 +20,7 @@ public class RedactionLogController implements RedactionLogResource {
private final RedactionLogService redactionLogService;
public RedactionLog getRedactionLog(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId,
public RedactionLog getRedactionLog(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = "excludedType", required = false) List<String> excludedTypes,
@RequestParam(value = "withManualRedactions", required = false, defaultValue = "true") boolean withManualRedactions,
@RequestParam(value = "includeFalsePositives", required = false, defaultValue = "false") boolean includeFalsePositives) {

View File

@ -1,5 +1,13 @@
package com.iqser.red.service.peristence.v1.server.service;
import java.time.OffsetDateTime;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ViewedPageEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService;
@ -8,15 +16,9 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do
import com.iqser.red.service.redaction.v1.model.ChangeType;
import com.iqser.red.service.redaction.v1.model.ManualRedactionType;
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.time.OffsetDateTime;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service

View File

@ -1,5 +1,12 @@
package com.iqser.red.service.peristence.v1.server.service.download;
import java.util.Map;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronRedactionRequest;
import com.iqser.red.service.peristence.v1.server.client.RedactionClient;
import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService;
@ -11,7 +18,11 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
@ -20,13 +31,9 @@ import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage;
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
import com.iqser.red.service.redaction.v1.model.AnnotateRequest;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service

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

@ -38,4 +38,6 @@ databaseChangeLog:
- include:
file: db/changelog/15-dossier-remove-dossier-state.changelog.yaml
- include:
file: db/changelog/16-added-has-dictionary-to-entities.changelog.yaml
file: db/changelog/16-added-has-dictionary-to-entities.changelog.yaml
- include:
file: db/changelog/17-digital-signature-kms.changelog.yaml

View File

@ -1,13 +1,14 @@
package com.iqser.red.service.peristence.v1.server.integration.service;
import static org.assertj.core.api.Assertions.assertThat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import static org.assertj.core.api.Assertions.assertThat;
@Service
public class TypeProvider {
@ -35,8 +36,7 @@ public class TypeProvider {
var createdType = dictionaryClient.addType(type);
var loadedType = dictionaryClient.getDictionaryForType(createdType.getId(),null);
var loadedType = dictionaryClient.getDictionaryForType(createdType.getId(), null);
assertThat(loadedType).isNotNull();

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

@ -1,5 +1,18 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.google.common.collect.Sets;
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient;
@ -14,18 +27,6 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ty
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionarySummary;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTest {
private static final String TYPE_ID_1 = "type1";

View File

@ -2,9 +2,6 @@ package com.iqser.red.service.peristence.v1.server.integration.tests;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import java.nio.charset.StandardCharsets;
import java.time.OffsetDateTime;
@ -12,11 +9,8 @@ import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierAttributeConfigClient;
@ -29,20 +23,8 @@ import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkCl
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService;
import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
@ -53,7 +35,6 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.co
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.WatermarkOrientation;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttributeType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry;
@ -205,8 +186,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
.type(DossierAttributeType.TEXT)
.placeholder("placeholderDossier")
.build()));
fileAttributeConfigClient.setFileAttributesGeneralConfig(dossierTemplate.getId(), FileAttributesGeneralConfiguration.builder()
.dossierTemplateId(dossierTemplate.getId())
fileAttributeConfigClient.setFileAttributesGeneralConfig(dossierTemplate.getId(), FileAttributesGeneralConfiguration.builder().dossierTemplateId(dossierTemplate.getId())
.delimiter("")
.filenameMappingColumnHeaderName("filenameMappingColumnHeaderName")
.build());

View File

@ -1,5 +1,16 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import com.google.common.collect.Sets;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierStatusClient;
@ -13,17 +24,8 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.Re
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
import feign.FeignException;
import org.junit.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Set;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
public class DossierTest extends AbstractPersistenceServerServiceTest {

View File

@ -1,13 +1,14 @@
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.RedactionLogClient;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import static org.assertj.core.api.Assertions.assertThat;
public class RedactionLogTest extends AbstractPersistenceServerServiceTest {
@ -27,8 +28,8 @@ public class RedactionLogTest extends AbstractPersistenceServerServiceTest {
var file = fileTesterAndProvider.testAndProvideFile(dossier);
assertThat(redactionLogClient.getSectionGrid(dossier.getId(), file.getId())).isNotNull();
assertThat(redactionLogClient.getRedactionLog(dossier.getId(), file.getId(), null,true, false)).isNotNull();
assertThat(redactionLogClient.getRedactionLog(dossier.getId(), file.getId(), null,false, false)).isNotNull();
assertThat(redactionLogClient.getRedactionLog(dossier.getId(), file.getId(), null, true, false)).isNotNull();
assertThat(redactionLogClient.getRedactionLog(dossier.getId(), file.getId(), null, false, false)).isNotNull();
}
}

View File

@ -27,7 +27,7 @@
<properties>
<redaction-service.version>3.86.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>3.52.0</pdftron-redaction-service.version><!-- TODO PSC Versions -->
<redaction-report-service.version>3.19.0</redaction-report-service.version>
</properties>