This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-3.18.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.18.x by this push: new 9136a97ce15 [CAMEL-18842] Checks for compression before throwing exception (#8947) 9136a97ce15 is described below commit 9136a97ce1577736cbb8bd59604be96d8956822d Author: Yasser Zamani <yasserzam...@apache.org> AuthorDate: Sun Dec 25 11:54:26 2022 +0330 [CAMEL-18842] Checks for compression before throwing exception (#8947) * add CAMEL-18842 reproducer test case * checking for compression before throwing exception fixes CAMEL-18842 --- .../component/as2/api/util/HttpMessageUtils.java | 8 +++++ .../camel/component/as2/api/AS2MessageTest.java | 42 ++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java index a4999f990da..4c05a9f1af4 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java @@ -212,6 +212,10 @@ public final class HttpMessageUtils { MimeEntity mimeEntity = multipartSignedEntity.getSignedDataEntity(); if (mimeEntity instanceof ApplicationEDIEntity) { ediEntity = (ApplicationEDIEntity) mimeEntity; + } else if (mimeEntity instanceof ApplicationPkcs7MimeCompressedDataEntity) { + ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity + = (ApplicationPkcs7MimeCompressedDataEntity) mimeEntity; + ediEntity = extractEdiPayloadFromCompressedEntity(compressedDataEntity); } else { throw new HttpException( "Failed to extract EDI payload: invalid content type '" + mimeEntity.getContentTypeValue() @@ -244,6 +248,10 @@ public final class HttpMessageUtils { MimeEntity mimeEntity = multipartSignedEntity.getSignedDataEntity(); if (mimeEntity instanceof ApplicationEDIEntity) { ediEntity = (ApplicationEDIEntity) mimeEntity; + } else if (mimeEntity instanceof ApplicationPkcs7MimeCompressedDataEntity) { + ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity + = (ApplicationPkcs7MimeCompressedDataEntity) mimeEntity; + ediEntity = extractEdiPayloadFromCompressedEntity(compressedDataEntity); } else { throw new HttpException( diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java index 022c9f04b1e..2894b676102 100644 --- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java +++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java @@ -1046,4 +1046,46 @@ public class AS2MessageTest { assertFalse(signatureEntity.isMainBody(), "First mime type set as main body of request"); } + @ParameterizedTest + @CsvSource({ "false,false", "false,true", "true,false", "true,true" }) + void compressionSignatureOrderTest(boolean encrypt, boolean compressBeforeSign) { + // test with as2-lib because Camel AS2 client doesn't support different orders at the moment + // inspired from https://github.com/phax/as2-lib/wiki/Submodule-as2%E2%80%90lib#as2-client + + // Start client configuration + final AS2ClientSettings aSettings = new AS2ClientSettings(); + aSettings.setKeyStore(EKeyStoreType.PKCS12, keystoreFile, "test"); + + // Fixed sender + aSettings.setSenderData(AS2_NAME, FROM, "openas2a_alias"); + + // Fixed receiver + aSettings.setReceiverData(AS2_NAME, "openas2b_alias", "http://" + TARGET_HOST + ":" + TARGET_PORT + "/"); + aSettings.setReceiverCertificate(issueCert); + + // AS2 stuff + aSettings.setPartnershipName(aSettings.getSenderAS2ID() + "_" + aSettings.getReceiverAS2ID()); + + // Build client request + final AS2ClientRequest aRequest = new AS2ClientRequest("AS2 test message from as2-lib"); + aRequest.setData(EDI_MESSAGE, StandardCharsets.US_ASCII); + aRequest.setContentType(AS2MediaType.APPLICATION_EDIFACT); + + // reproduce https://issues.apache.org/jira/browse/CAMEL-18842 + aSettings.setEncryptAndSign(encrypt ? ECryptoAlgorithmCrypt.CRYPT_AES128_GCM : null, + ECryptoAlgorithmSign.DIGEST_SHA_512); + aSettings.setCompress(ECompressionType.ZLIB, compressBeforeSign); + aRequest.setContentTransferEncoding(EContentTransferEncoding.BINARY); + + // Send message + ediEntity = null; + final AS2ClientResponse aResponse = new AS2Client().sendSynchronous(aSettings, aRequest); + + // Assertions + if (aResponse.hasException()) { + fail(aResponse.getException()); + } + assertEquals(EDI_MESSAGE, ediEntity.getEdiMessage().replaceAll("\r", "")); + } + }