diff --git a/pom.xml b/pom.xml index 20fc6af..fad59e6 100755 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ oxalis-as4 - 4.1.4 + 4.1.5 jar diff --git a/src/main/java/no/difi/oxalis/as4/outbound/As4MessageSender.java b/src/main/java/no/difi/oxalis/as4/outbound/As4MessageSender.java index 4aa84ff..e481215 100644 --- a/src/main/java/no/difi/oxalis/as4/outbound/As4MessageSender.java +++ b/src/main/java/no/difi/oxalis/as4/outbound/As4MessageSender.java @@ -49,32 +49,30 @@ public class As4MessageSender { public static final QName SERVICE_NAME = new QName("oxalis.difi.no/", "outbound-service"); public static final QName PORT_NAME = new QName("oxalis.difi.no/", "port"); - @Inject - private MessagingProvider messagingProvider; - - @Inject - private MessageIdGenerator messageIdGenerator; - - @Inject - private Settings settings; - - @Inject - private Settings as4settings; - - @Inject - private CompressionUtil compressionUtil; - - @Inject - private Settings httpConfSettings; - - @Inject - private TransmissionResponseConverter transmissionResponseConverter; - - @Inject - private MerlinProvider merlinProvider; + private final MessagingProvider messagingProvider; + private final MessageIdGenerator messageIdGenerator; + private final Settings settings; + private final Settings as4settings; + private final CompressionUtil compressionUtil; + private final Settings httpConfSettings; + private final TransmissionResponseConverter transmissionResponseConverter; + private final MerlinProvider merlinProvider; + private final PolicyService policyService; + private final String browserType; @Inject - private PolicyService policyService; + public As4MessageSender(MessagingProvider messagingProvider, MessageIdGenerator messageIdGenerator, Settings settings, Settings as4settings, CompressionUtil compressionUtil, Settings httpConfSettings, TransmissionResponseConverter transmissionResponseConverter, MerlinProvider merlinProvider, PolicyService policyService, BrowserTypeProvider browserTypeProvider) { + this.messagingProvider = messagingProvider; + this.messageIdGenerator = messageIdGenerator; + this.settings = settings; + this.as4settings = as4settings; + this.compressionUtil = compressionUtil; + this.httpConfSettings = httpConfSettings; + this.transmissionResponseConverter = transmissionResponseConverter; + this.merlinProvider = merlinProvider; + this.policyService = policyService; + this.browserType = browserTypeProvider.getBrowserType(); + } public TransmissionResponse send(TransmissionRequest request) throws OxalisAs4TransmissionException { try (DispatchImpl dispatch = createDispatch(request)) { @@ -162,6 +160,9 @@ private DispatchImpl createDispatch(TransmissionRequest request) th final HTTPClientPolicy httpClientPolicy = httpConduit.getClient(); httpClientPolicy.setConnectionTimeout(httpConfSettings.getInt(HttpConf.TIMEOUT_CONNECT)); httpClientPolicy.setReceiveTimeout(httpConfSettings.getInt(HttpConf.TIMEOUT_READ)); + httpClientPolicy.setAllowChunking(true); + httpClientPolicy.setChunkLength(8192); + httpClientPolicy.setBrowserType(browserType); return dispatch; } diff --git a/src/main/java/no/difi/oxalis/as4/outbound/BrowserTypeProvider.java b/src/main/java/no/difi/oxalis/as4/outbound/BrowserTypeProvider.java new file mode 100644 index 0000000..d04fc82 --- /dev/null +++ b/src/main/java/no/difi/oxalis/as4/outbound/BrowserTypeProvider.java @@ -0,0 +1,45 @@ +package no.difi.oxalis.as4.outbound; + +import com.google.inject.Inject; +import com.google.inject.Singleton; +import lombok.extern.slf4j.Slf4j; +import no.difi.oxalis.as4.inbound.OxalisAS4Version; +import no.difi.oxalis.commons.util.OxalisVersion; +import org.bouncycastle.asn1.x500.RDN; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.asn1.x500.style.BCStyle; +import org.bouncycastle.asn1.x500.style.IETFUtils; +import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder; + +import java.security.cert.CertificateEncodingException; +import java.security.cert.X509Certificate; + +@Slf4j +@Singleton +public class BrowserTypeProvider { + + private final X509Certificate certificate; + + @Inject + public BrowserTypeProvider(X509Certificate certificate) { + this.certificate = certificate; + } + + public String getBrowserType() { + return String.format("Oxalis %s / AS4 %s / %s", + OxalisVersion.getVersion(), + OxalisAS4Version.getVersion(), + getCN()); + } + + private String getCN() { + try { + X500Name x500name = new JcaX509CertificateHolder(certificate).getSubject(); + RDN cn = x500name.getRDNs(BCStyle.CN)[0]; + return IETFUtils.valueToString(cn.getFirst().getValue()); + } catch (CertificateEncodingException e) { + log.warn("Could not extract CN from certificate", e); + return "Unknown"; + } + } +} diff --git a/src/main/java/no/difi/oxalis/as4/util/SOAPHeaderParser.java b/src/main/java/no/difi/oxalis/as4/util/SOAPHeaderParser.java index d370545..ceffdc8 100644 --- a/src/main/java/no/difi/oxalis/as4/util/SOAPHeaderParser.java +++ b/src/main/java/no/difi/oxalis/as4/util/SOAPHeaderParser.java @@ -79,7 +79,8 @@ public static X509Certificate getSenderCertificate(SOAPHeader header) throws Oxa if (bstNodes != null) { for (int i = 0; i < bstNodes.getLength(); i++) { Element bstElem = (Element) bstNodes.item(i); - if (bstElem.getAttribute("wsu:Id").equals(refUri)) { + + if (bstElem.getAttributeNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Id").equals(refUri)) { try { String pem = bstElem.getTextContent().replaceAll("[\r\n]+", ""); byte[] buf = Base64.getDecoder().decode(pem);