Skip to content
This repository was archived by the owner on Oct 6, 2025. It is now read-only.

Commit f9766a8

Browse files
committed
Merge remote-tracking branch 'origin/issues/8_fttp-client-proxy' into
develop
2 parents 89b11aa + e00d512 commit f9766a8

18 files changed

Lines changed: 90 additions & 36 deletions

File tree

codex-process-data-transfer/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<parent>
99
<groupId>de.netzwerk-universitaetsmedizin.codex</groupId>
1010
<artifactId>codex-processes-ap1</artifactId>
11-
<version>0.3.1-SNAPSHOT</version>
11+
<version>0.3.2-SNAPSHOT</version>
1212
</parent>
1313

1414
<properties>

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/DataTransferProcessPluginDefinition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
public class DataTransferProcessPluginDefinition implements ProcessPluginDefinition
2222
{
23-
public static final String VERSION = "0.3.1";
23+
public static final String VERSION = "0.3.2";
2424

2525
@Override
2626
public String getName()

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/FttpClientFactory.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,27 +80,38 @@ public void testConnection()
8080
private final Path trustStorePath;
8181
private final Path certificatePath;
8282
private final Path privateKeyPath;
83-
private final String basicAuthUsername;
84-
private final String basicAuthPassword;
83+
8584
private final String fttpServerBase;
85+
private final String fttpBasicAuthUsername;
86+
private final String fttpBasicAuthPassword;
87+
8688
private final String fttpApiKey;
8789
private final String fttpStudy;
8890
private final String fttpTarget;
8991

90-
public FttpClientFactory(Path trustStorePath, Path certificatePath, Path privateKeyPath, String basicAuthUsername,
91-
String basicAuthPassword, String fttpServerBase, String fttpApiKey, String fttpStudy, String fttpTarget)
92+
private final String proxySchemeHostPort;
93+
private final String proxyUsername;
94+
private final String proxyPassword;
95+
96+
public FttpClientFactory(Path trustStorePath, Path certificatePath, Path privateKeyPath,
97+
String fttpBasicAuthUsername, String fttpBasicAuthPassword, String fttpServerBase, String fttpApiKey,
98+
String fttpStudy, String fttpTarget, String proxySchemeHostPort, String proxyUsername, String proxyPassword)
9299
{
93100
this.trustStorePath = trustStorePath;
94101
this.certificatePath = certificatePath;
95102
this.privateKeyPath = privateKeyPath;
96103

97-
this.basicAuthUsername = basicAuthUsername;
98-
this.basicAuthPassword = basicAuthPassword;
104+
this.fttpBasicAuthUsername = fttpBasicAuthUsername;
105+
this.fttpBasicAuthPassword = fttpBasicAuthPassword;
99106

100107
this.fttpServerBase = fttpServerBase;
101108
this.fttpApiKey = fttpApiKey;
102109
this.fttpStudy = fttpStudy;
103110
this.fttpTarget = fttpTarget;
111+
112+
this.proxySchemeHostPort = proxySchemeHostPort;
113+
this.proxyUsername = proxyUsername;
114+
this.proxyPassword = proxyPassword;
104115
}
105116

106117
@EventListener({ ContextRefreshedEvent.class })
@@ -144,8 +155,8 @@ protected FttpClient createFttpClient()
144155
logger.debug("Creating key-store from {} and {}", certificatePath.toString(), privateKeyPath.toString());
145156
KeyStore keyStore = readKeyStore(certificatePath, privateKeyPath, keyStorePassword);
146157

147-
return new FttpClientImpl(trustStore, keyStore, keyStorePassword, basicAuthUsername, basicAuthPassword,
148-
fttpServerBase, fttpApiKey, fttpStudy, fttpTarget);
158+
return new FttpClientImpl(trustStore, keyStore, keyStorePassword, fttpBasicAuthUsername, fttpBasicAuthPassword,
159+
fttpServerBase, fttpApiKey, fttpStudy, fttpTarget, proxySchemeHostPort, proxyUsername, proxyPassword);
149160
}
150161

151162
private KeyStore readTrustStore(Path trustPath)

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/FttpClientImpl.java

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PSEUDONYM_PATTERN_STRING;
44

5+
import java.net.MalformedURLException;
6+
import java.net.URL;
57
import java.security.KeyStore;
68
import java.util.Objects;
79
import java.util.Optional;
810
import java.util.regex.Matcher;
911
import java.util.regex.Pattern;
1012

13+
import org.apache.commons.lang3.StringUtils;
1114
import org.hl7.fhir.r4.model.Base64BinaryType;
1215
import org.hl7.fhir.r4.model.CapabilityStatement;
1316
import org.hl7.fhir.r4.model.Identifier;
@@ -34,23 +37,32 @@ public class FttpClientImpl implements FttpClient, InitializingBean
3437

3538
private final IRestfulClientFactory clientFactory;
3639

37-
private final String basicAuthUsername;
38-
private final String basicAuthPassword;
39-
4040
private final String fttpServerBase;
41+
private final String fttpBasicAuthUsername;
42+
private final String fttpBasicAuthPassword;
43+
4144
private final String fttpStudy;
4245
private final String fttpTarget;
4346
private final String fttpApiKey;
4447

45-
public FttpClientImpl(KeyStore trustStore, KeyStore keyStore, char[] keyStorePassword, String basicAuthUsername,
46-
String basicAuthPassword, String fttpServerBase, String fttpApiKey, String fttpStudy, String fttpTarget)
48+
private final String proxySchemeHostPort;
49+
private final String proxyUsername;
50+
private final String proxyPassword;
51+
52+
public FttpClientImpl(KeyStore trustStore, KeyStore keyStore, char[] keyStorePassword, String fttpBasicAuthUsername,
53+
String fttpBasicAuthPassword, String fttpServerBase, String fttpApiKey, String fttpStudy, String fttpTarget,
54+
String proxySchemeHostPort, String proxyUsername, String proxyPassword)
4755
{
48-
this.basicAuthUsername = basicAuthUsername;
49-
this.basicAuthPassword = basicAuthPassword;
56+
this.proxySchemeHostPort = proxySchemeHostPort;
57+
this.proxyUsername = proxyUsername;
58+
this.proxyPassword = proxyPassword;
5059

5160
clientFactory = createClientFactory(trustStore, keyStore, keyStorePassword);
5261

5362
this.fttpServerBase = fttpServerBase;
63+
this.fttpBasicAuthUsername = fttpBasicAuthUsername;
64+
this.fttpBasicAuthPassword = fttpBasicAuthPassword;
65+
5466
this.fttpApiKey = fttpApiKey;
5567
this.fttpStudy = fttpStudy;
5668
this.fttpTarget = fttpTarget;
@@ -67,11 +79,32 @@ protected ApacheRestfulClientFactoryWithTlsConfig createClientFactory(KeyStore t
6779
ApacheRestfulClientFactoryWithTlsConfig hapiClientFactory = new ApacheRestfulClientFactoryWithTlsConfig(
6880
fhirContext, trustStore, keyStore, keyStorePassword);
6981
hapiClientFactory.setServerValidationMode(ServerValidationModeEnum.NEVER);
82+
configureProxy(hapiClientFactory);
7083

7184
fhirContext.setRestfulClientFactory(hapiClientFactory);
7285
return hapiClientFactory;
7386
}
7487

88+
private void configureProxy(ApacheRestfulClientFactoryWithTlsConfig clientFactory)
89+
{
90+
if (StringUtils.isNotBlank(proxySchemeHostPort))
91+
{
92+
try
93+
{
94+
URL url = new URL(proxySchemeHostPort);
95+
clientFactory.setProxy(url.getHost(), url.getPort());
96+
clientFactory.setProxyCredentials(proxyUsername, proxyPassword);
97+
98+
logger.info("Using proxy for fTTP connection with {host: {}, port: {}, username: {}}", url.getHost(),
99+
url.getPort(), proxyUsername);
100+
}
101+
catch (MalformedURLException e)
102+
{
103+
logger.error("Could not configure proxy", e);
104+
}
105+
}
106+
}
107+
75108
@Override
76109
public void afterPropertiesSet() throws Exception
77110
{
@@ -198,13 +231,13 @@ private IGenericClient createGenericClient()
198231
client.registerInterceptor(new LoggingInterceptor());
199232

200233
if (configuredWithBasicAuth())
201-
client.registerInterceptor(new BasicAuthInterceptor(basicAuthUsername, basicAuthPassword));
234+
client.registerInterceptor(new BasicAuthInterceptor(fttpBasicAuthUsername, fttpBasicAuthPassword));
202235

203236
return client;
204237
}
205238

206239
private boolean configuredWithBasicAuth()
207240
{
208-
return basicAuthUsername != null && basicAuthPassword != null;
241+
return fttpBasicAuthUsername != null && fttpBasicAuthPassword != null;
209242
}
210243
}

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/spring/config/TransferDataConfig.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,15 @@ public class TransferDataConfig
121121
@Value("${de.netzwerk_universitaetsmedizin.codex.fttp.target:codex}")
122122
private String fttpTarget;
123123

124+
@Value("${org.highmed.dsf.bpe.fhir.remote.webservice.proxy.schemeHostPort:#{null}}")
125+
private String proxySchemeHostPort;
126+
127+
@Value("${org.highmed.dsf.bpe.fhir.remote.webservice.proxy.username:#{null}}")
128+
private String proxyUsername;
129+
130+
@Value("${org.highmed.dsf.bpe.fhir.remote.webservice.proxy.password:#{null}}")
131+
private String proxyPassword;
132+
124133
@Value("${org.highmed.dsf.fhir.local-organization.identifier}")
125134
private String localIdentifierValue;
126135

@@ -145,7 +154,8 @@ public FttpClientFactory fttpClientFactory()
145154
Path privateKeyPath = checkExists(fttpPrivateKey);
146155

147156
return new FttpClientFactory(trustStorePath, certificatePath, privateKeyPath, fttpBasicAuthUsername,
148-
fttpBasicAuthPassword, fttpServerBase, fttpApiKey, fttpStudy, fttpTarget);
157+
fttpBasicAuthPassword, fttpServerBase, fttpApiKey, fttpStudy, fttpTarget, proxySchemeHostPort,
158+
proxyUsername, proxyPassword);
149159
}
150160

151161
@Bean

codex-process-data-transfer/src/main/resources/bpe/receive.bpmn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_18azqkl" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.2.0">
3-
<bpmn:process id="dataReceive" isExecutable="true" camunda:versionTag="0.3.1">
3+
<bpmn:process id="dataReceive" isExecutable="true" camunda:versionTag="0.3.2">
44
<bpmn:startEvent id="DataReceiveMessageStartEvent" name="start data receive process">
55
<bpmn:outgoing>Flow_1gyqorb</bpmn:outgoing>
66
<bpmn:messageEventDefinition id="MessageEventDefinition_1qwi1k6" messageRef="Message_157qpi8" />

codex-process-data-transfer/src/main/resources/bpe/send.bpmn

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_008keuw" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.8.1">
3-
<bpmn:process id="dataSend" isExecutable="true" camunda:versionTag="0.3.1">
3+
<bpmn:process id="dataSend" isExecutable="true" camunda:versionTag="0.3.2">
44
<bpmn:startEvent id="DataSendMessageStartEvent" name="start data send process">
55
<bpmn:outgoing>Flow_1km61ly</bpmn:outgoing>
66
<bpmn:messageEventDefinition id="MessageEventDefinition_07sumgd" messageRef="Message_0mcjkpi" />
@@ -21,7 +21,7 @@
2121
<bpmn:extensionElements>
2222
<camunda:inputOutput>
2323
<camunda:inputParameter name="processDefinitionKey">dataTranslate</camunda:inputParameter>
24-
<camunda:inputParameter name="versionTag">0.3.1</camunda:inputParameter>
24+
<camunda:inputParameter name="versionTag">0.3.2</camunda:inputParameter>
2525
<camunda:inputParameter name="messageName">startDataTranslate</camunda:inputParameter>
2626
<camunda:inputParameter name="profile">http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-translate</camunda:inputParameter>
2727
</camunda:inputOutput>

codex-process-data-transfer/src/main/resources/bpe/translate.bpmn

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1davgtw" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.2.0">
3-
<bpmn:process id="dataTranslate" isExecutable="true" camunda:versionTag="0.3.1">
3+
<bpmn:process id="dataTranslate" isExecutable="true" camunda:versionTag="0.3.2">
44
<bpmn:startEvent id="DataTranslateMessageStartEvent" name="start data translate process">
55
<bpmn:outgoing>Flow_185r1m5</bpmn:outgoing>
66
<bpmn:messageEventDefinition id="MessageEventDefinition_0nqjzhp" messageRef="Message_1nly3ld" />
@@ -25,7 +25,7 @@
2525
<bpmn:extensionElements>
2626
<camunda:inputOutput>
2727
<camunda:inputParameter name="processDefinitionKey">dataReceive</camunda:inputParameter>
28-
<camunda:inputParameter name="versionTag">0.3.1</camunda:inputParameter>
28+
<camunda:inputParameter name="versionTag">0.3.2</camunda:inputParameter>
2929
<camunda:inputParameter name="messageName">startDataReceive</camunda:inputParameter>
3030
<camunda:inputParameter name="profile">http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-receive</camunda:inputParameter>
3131
</camunda:inputOutput>

codex-process-data-transfer/src/main/resources/bpe/trigger.bpmn

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1bd6yss" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.8.1">
3-
<bpmn:process id="dataTrigger" isExecutable="true" camunda:versionTag="0.3.1">
3+
<bpmn:process id="dataTrigger" isExecutable="true" camunda:versionTag="0.3.2">
44
<bpmn:serviceTask id="FindNewData" name="find new data" camunda:class="de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.service.FindNewData">
55
<bpmn:incoming>Flow_0jy9ipp</bpmn:incoming>
66
<bpmn:outgoing>Flow_0xlfzol</bpmn:outgoing>
@@ -9,7 +9,7 @@
99
<bpmn:extensionElements>
1010
<camunda:inputOutput>
1111
<camunda:inputParameter name="processDefinitionKey">dataSend</camunda:inputParameter>
12-
<camunda:inputParameter name="versionTag">0.3.1</camunda:inputParameter>
12+
<camunda:inputParameter name="versionTag">0.3.2</camunda:inputParameter>
1313
<camunda:inputParameter name="messageName">startDataSend</camunda:inputParameter>
1414
<camunda:inputParameter name="profile">http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-send</camunda:inputParameter>
1515
</camunda:inputOutput>

codex-process-data-transfer/src/test/resources/fhir/Task/TaskStartDataSendWithAbsoluteReference.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<meta>
33
<profile value="http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-send"/>
44
</meta>
5-
<instantiatesUri value="http://highmed.org/bpe/Process/dataSend/0.3.1"/>
5+
<instantiatesUri value="http://highmed.org/bpe/Process/dataSend/0.3.2"/>
66
<status value="requested"/>
77
<intent value="order"/>
88
<authoredOn value="2021-04-07T12:30:00+01:00"/>

0 commit comments

Comments
 (0)