Skip to content

Commit

Permalink
Adding specialized User-Agent header for outbound.
Browse files Browse the repository at this point in the history
  • Loading branch information
FrodeBjerkholt committed Feb 13, 2020
1 parent c364e8d commit 98b733e
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 24 deletions.
47 changes: 23 additions & 24 deletions src/main/java/no/difi/oxalis/as4/outbound/As4MessageSender.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<KeyStoreConf> settings;

@Inject
private Settings<As4Conf> as4settings;

@Inject
private CompressionUtil compressionUtil;

@Inject
private Settings<HttpConf> httpConfSettings;

@Inject
private TransmissionResponseConverter transmissionResponseConverter;

@Inject
private MerlinProvider merlinProvider;
private final MessagingProvider messagingProvider;
private final MessageIdGenerator messageIdGenerator;
private final Settings<KeyStoreConf> settings;
private final Settings<As4Conf> as4settings;
private final CompressionUtil compressionUtil;
private final Settings<HttpConf> 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<KeyStoreConf> settings, Settings<As4Conf> as4settings, CompressionUtil compressionUtil, Settings<HttpConf> 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<SOAPMessage> dispatch = createDispatch(request)) {
Expand Down Expand Up @@ -164,6 +162,7 @@ private DispatchImpl<SOAPMessage> createDispatch(TransmissionRequest request) th
httpClientPolicy.setReceiveTimeout(httpConfSettings.getInt(HttpConf.TIMEOUT_READ));
httpClientPolicy.setAllowChunking(true);
httpClientPolicy.setChunkLength(8192);
httpClientPolicy.setBrowserType(browserType);

return dispatch;
}
Expand Down
45 changes: 45 additions & 0 deletions src/main/java/no/difi/oxalis/as4/outbound/BrowserTypeProvider.java
Original file line number Diff line number Diff line change
@@ -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";
}
}
}

0 comments on commit 98b733e

Please sign in to comment.