From 131039ec1bdd44c6caca99d08a7d06019d6d4641 Mon Sep 17 00:00:00 2001 From: Juku Trump Date: Wed, 31 Jul 2024 11:28:47 +0300 Subject: [PATCH] SIGA-876 Preserve unknown mimetypes defined in manifest.xml --- .../signature/hashcode/HashcodeContainer.java | 4 ++-- .../hashcode/HashcodeContainerTest.java | 20 ++++++++++++++++++ .../service/signature/test/RequestUtil.java | 1 + ...container_unsigned_with_txt_and_docx.asice | Bin 0 -> 1319 bytes 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 siga-signature-service/src/test/resources/hashcode_container_unsigned_with_txt_and_docx.asice diff --git a/siga-signature-service/src/main/java/ee/openeid/siga/service/signature/hashcode/HashcodeContainer.java b/siga-signature-service/src/main/java/ee/openeid/siga/service/signature/hashcode/HashcodeContainer.java index 15bd9122..f6792438 100644 --- a/siga-signature-service/src/main/java/ee/openeid/siga/service/signature/hashcode/HashcodeContainer.java +++ b/siga-signature-service/src/main/java/ee/openeid/siga/service/signature/hashcode/HashcodeContainer.java @@ -13,7 +13,6 @@ import eu.europa.esig.dss.model.DSSException; import eu.europa.esig.dss.model.DigestDocument; import eu.europa.esig.dss.model.InMemoryDocument; -import eu.europa.esig.dss.enumerations.MimeType; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; @@ -21,6 +20,7 @@ import org.digidoc4j.impl.asic.manifest.AsicManifest; import org.digidoc4j.impl.asic.manifest.ManifestEntry; import org.digidoc4j.impl.asic.manifest.ManifestParser; +import org.digidoc4j.utils.MimeTypeUtil; import java.io.IOException; import java.io.InputStream; @@ -236,7 +236,7 @@ private void validateFileSize(ZipArchiveEntry zipEntry) { private List convertDataFiles() { return dataFiles.stream().map(d -> { DSSDocument dssDocument = new DigestDocument(); - dssDocument.setMimeType(d.getMimeType() != null ? MimeType.fromMimeTypeString(d.getMimeType()) : MimeTypeEnum.BINARY); + dssDocument.setMimeType(d.getMimeType() != null ? MimeTypeUtil.fromMimeTypeString(d.getMimeType()) : MimeTypeEnum.BINARY); dssDocument.setName(d.getFileName()); org.digidoc4j.DataFile dataFile = new org.digidoc4j.DataFile(); dataFile.setDocument(dssDocument); diff --git a/siga-signature-service/src/test/java/ee/openeid/siga/service/signature/hashcode/HashcodeContainerTest.java b/siga-signature-service/src/test/java/ee/openeid/siga/service/signature/hashcode/HashcodeContainerTest.java index 1ca211b7..c4123638 100644 --- a/siga-signature-service/src/test/java/ee/openeid/siga/service/signature/hashcode/HashcodeContainerTest.java +++ b/siga-signature-service/src/test/java/ee/openeid/siga/service/signature/hashcode/HashcodeContainerTest.java @@ -32,6 +32,7 @@ import static ee.openeid.siga.service.signature.test.RequestUtil.SIGNED_HASHCODE; import static ee.openeid.siga.service.signature.test.RequestUtil.SIGNED_HASHCODE_SEVERAL_DATAFILES; import static ee.openeid.siga.service.signature.test.RequestUtil.SIGNED_HASHCODE_SEVERAL_DATAFILES_RANDOM_ORDER; +import static ee.openeid.siga.service.signature.test.RequestUtil.UNKNOWN_MIMETYPES_DEFINED_IN_MANIFEST; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; @@ -231,6 +232,25 @@ void manifestHasDifferentFileNameOrder() throws URISyntaxException, IOException assertEquals("test2.txt", hashcodeContainer.getDataFiles().get(2).getFileName()); } + @Test + void shouldUseExistingMimetypeFromManifestForUnknownMimetype() throws URISyntaxException, IOException { + HashcodeContainer hashcodeContainer = new HashcodeContainer(); + byte[] container = TestUtil.getFile(UNKNOWN_MIMETYPES_DEFINED_IN_MANIFEST); + hashcodeContainer.open(container); + HashcodeContainer newContainer; + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + hashcodeContainer.save(outputStream); + newContainer = new HashcodeContainer(); + newContainer.open(outputStream.toByteArray()); + } + + assertEquals(2, newContainer.getDataFiles().size()); + assertEquals("text_file.txt", newContainer.getDataFiles().get(0).getFileName()); + assertEquals("text/plain", newContainer.getDataFiles().get(0).getMimeType()); + assertEquals("word_file.docx", newContainer.getDataFiles().get(1).getFileName()); + assertEquals("application/vnd.openxmlformats-officedocument.wordprocessingml.document", newContainer.getDataFiles().get(1).getMimeType()); + } + @Test void couldNotAddDataFileWhenSignatureExists() throws URISyntaxException, IOException { HashcodeContainer hashcodeContainer = new HashcodeContainer(); diff --git a/siga-signature-service/src/test/java/ee/openeid/siga/service/signature/test/RequestUtil.java b/siga-signature-service/src/test/java/ee/openeid/siga/service/signature/test/RequestUtil.java index 290f88bf..d90d307a 100644 --- a/siga-signature-service/src/test/java/ee/openeid/siga/service/signature/test/RequestUtil.java +++ b/siga-signature-service/src/test/java/ee/openeid/siga/service/signature/test/RequestUtil.java @@ -58,6 +58,7 @@ public class RequestUtil { public static final String DIFFERENT_SHA256_ORDER = "different_sha256_filename_order.asice"; public static final String DIFFERENT_SHA512_ORDER = "different_sha512_filename_order.asice"; public static final String DIFFERENT_MANIFEST_ORDER = "different_manifest_filename_order.asice"; + public static final String UNKNOWN_MIMETYPES_DEFINED_IN_MANIFEST = "hashcode_container_unsigned_with_txt_and_docx.asice"; public static final String DOCUMENT_NUMBER = "PNOEE-123456789-QWER"; public static final String CONTAINER_ID = "23423423-234234234-324234-4234"; public static final String CONTAINER_SESSION_ID = "v1_user_name_23423423-234234234-324234-4234"; diff --git a/siga-signature-service/src/test/resources/hashcode_container_unsigned_with_txt_and_docx.asice b/siga-signature-service/src/test/resources/hashcode_container_unsigned_with_txt_and_docx.asice new file mode 100644 index 0000000000000000000000000000000000000000..3f153c955bead3f2db62b6dc2ce496947638e8aa GIT binary patch literal 1319 zcmWIWW@Zs#;Nak32zU4&!GHv0foxyb5Jz24KR5l1#Nv$P{FKyU-QtWyBU3ZIirk#i z^MU?{3`AHT?7wv9`^Jr~ttqVy=U7!Px|wt8vt3`O`#LPvTH{YuB+sWOuWi+Tp6gw{ zE-d4GlyYfvq6G)T#$^{m%w(LueS6WHVAXl_TF2*!Gd*Lxj@n$i@vY;OpXU4QY*x0@ zbN;?q+*m3WaR2y(>4yq~?q9E)HY@dqiP(E{ zMGwqmzE7zC`-VNho1No-`LWp-fF9>&WMBv&BWO$wjle;3;cQ-$0|U#0aK-Ao8X6iV zg1n-h3s-J!x>1$M@w+`zyg=M>-o9DOK3;i!MrPlcoQrdJlpRcuoN|bD@j^xuoliod zO}i4NvoN#kJTso=S;oC_&Uuf69~rny_hl`4SQC)iwbS9DU+w+X3tx#`cvmfMkTuO9 zIlgSJd=0zN)E71TeJ5QjvU{i&>$X>1y4~)UYp>v|?AbQ?OeVhl?{9kCKelu4T#qNh zS#ih3)&|vk-di)Fc8A`Dl#7pNUt{=HzhIlq;&=hA&+q)Vq|J${6jOFS`C`T4jAlwObiU7$muRO zF)uSMwYUTns8c68`ZFsEw7&n>#T(ANdLGZqZRYij^LQH_JrmjvM%}gy4mo{(&T9MJ55K(w zrbcEKE>QS@GiI0KPgi+hz<@ANh#@yKH?^d)AT_a|ASW|9u_QA;ProcLMK86aI8!gN zI5Sx{Rl6#)Ai$fENrVBBzmbzSD1V~@yty6SDCEdQHA)&7z1WR{<_?fi_RJzUVqXR7 zD20YCjTON305=LbEpRa?fR!;aNH8$C)|n_gzQu@6gRJ3Vz#WDN&(8!p1s0+K-mGjO Q85STk2KwY4P>z8C03j0Y(*OVf literal 0 HcmV?d00001