Skip to content

Commit

Permalink
SIGA-876 Preserve unknown mimetypes defined in manifest.xml
Browse files Browse the repository at this point in the history
  • Loading branch information
jukutr committed Jul 31, 2024
1 parent a160614 commit 131039e
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@
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;
import org.apache.commons.lang3.StringUtils;
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;
Expand Down Expand Up @@ -236,7 +236,7 @@ private void validateFileSize(ZipArchiveEntry zipEntry) {
private List<org.digidoc4j.DataFile> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Binary file not shown.

0 comments on commit 131039e

Please sign in to comment.