diff --git a/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java b/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java index e6ec919c3dde7f7dc7dea7191b1a1d995122b20b..deb83638c8f8ffce735d10fae2a2719ace6bbdd8 100644 --- a/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java +++ b/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java @@ -355,13 +355,10 @@ public class DefaultValidationService implements ValidationService { } // https://docs.fitko.de/fit-connect/docs/receiving/verification/#r%C3%BCckkanal - final ReplyChannel submissionReplyChannel = metadata.getReplyChannel(); - final ReplyChannel destinationReplyChannel = destination.getReplyChannels(); - - if (submissionReplyChannel != null) { - final List<Class<?>> submissionReplyChannelClass = getNonNullReplyChannelTypes(submissionReplyChannel); - final List<Class<?>> destinationReplyChannelClass = getNonNullReplyChannelTypes(destinationReplyChannel); - if (!new HashSet<>(destinationReplyChannelClass).containsAll(submissionReplyChannelClass)) { + if (metadata.getReplyChannel() != null && destination.getReplyChannels()!= null) { + final List<Class<?>> submissionReplyChannelClasses = getNonNullReplyChannelTypes(metadata.getReplyChannel()); + final List<Class<?>> destinationReplyChannelClasses = getNonNullReplyChannelTypes(destination.getReplyChannels()); + if (!new HashSet<>(destinationReplyChannelClasses).containsAll(submissionReplyChannelClasses)) { return ValidationResult.problem(new UnsupportedReplyChannel()); } } diff --git a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java index 8e7f0d145c38fe464b26963218843c488c316236..73747ecb89dce53368fd012199f8fdbe3ccb5701 100644 --- a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java +++ b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java @@ -669,6 +669,58 @@ class DefaultValidationServiceTest { assertThat(validationResult.getProblems().get(0), instanceOf(UnsupportedReplyChannel.class)); } + @Test + void testDestinationWithNoReplyChannelAndSubmissionWithReplyChannel() { + + // Given + final SubmissionSchema schema = new SubmissionSchema(); + schema.setSchemaUri(URI.create("https://schema.fitko.de/fit-connect/metadata/1.0.0/metadata.schema.json")); + schema.setMimeType(MimeType.APPLICATION_JSON); + + final Hash hash = new Hash(); + hash.setContent(hashService.toHexString(hashService.createHash("someBogusContent".getBytes()))); + hash.setSignatureType(SignatureType.SHA_512); + + final Data data = new Data(); + data.setSubmissionSchema(schema); + data.setHash(hash); + + final ContentStructure contentStructure = new ContentStructure(); + contentStructure.setAttachments(Collections.emptyList()); + contentStructure.setData(data); + + final var metadata = new Metadata(); + metadata.setSchema(SchemaConfig.METADATA_V_1_0_0.toString()); + metadata.setContentStructure(contentStructure); + + final DestinationService destinationService = new DestinationService(); + destinationService.setIdentifier("urn:de:fim:leika:leistung:99400048079000"); + destinationService.setSubmissionSchemas(Set.of(schema)); + + final var destination = new Destination(); + destination.setServices(Set.of(destinationService)); + + final ServiceType submissionServiceType = new ServiceType(); + submissionServiceType.setIdentifier("urn:de:fim:leika:leistung:99400048079000"); + + final var submission = new Submission(); + submission.setEncryptedMetadata("header.encryption_key.init_vector.ciphertext.metadataAuthTag"); + submission.setServiceType(submissionServiceType); + + final var authenticationTags = new AuthenticationTags(); + authenticationTags.setMetadata("metadataAuthTag"); + + final ReplyChannel submissionReplyChannel = new ReplyChannel(); + submissionReplyChannel.setEMail(new Email("test@mail.org", false, null)); + metadata.setReplyChannel(submissionReplyChannel); + + // When + final ValidationResult validationResult = underTest.validateMetadata(metadata, submission, destination, authenticationTags); + + // Then + assertTrue(validationResult.isValid()); + } + @Test void validateMetadataWithoutSchemaAttributeButValidSchema() { @@ -1415,11 +1467,10 @@ class DefaultValidationServiceTest { final var testing = new Environment(); testing.setAllowInsecurePublicKey(allowInsecureKey); testing.setSkipSubmissionDataValidation(skipSubmissionDataValidation); - final var config = ApplicationConfig.builder() + return ApplicationConfig.builder() .environments(Map.of(envName, testing)) .activeEnvironment(envName) .build(); - return config; } } \ No newline at end of file