From 2224f7d90220e09bc8281e2a648591309ea7ce93 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sun, 19 Apr 2026 15:39:57 +0200 Subject: [PATCH] feat(http): core outbound HTTP interfaces and property records --- cameleer-server-core/pom.xml | 4 ++++ .../core/http/OutboundHttpClientFactory.java | 8 ++++++++ .../core/http/OutboundHttpProperties.java | 20 +++++++++++++++++++ .../core/http/OutboundHttpRequestContext.java | 20 +++++++++++++++++++ .../cameleer/server/core/http/TrustMode.java | 7 +++++++ 5 files changed, 59 insertions(+) create mode 100644 cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpClientFactory.java create mode 100644 cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpProperties.java create mode 100644 cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpRequestContext.java create mode 100644 cameleer-server-core/src/main/java/com/cameleer/server/core/http/TrustMode.java diff --git a/cameleer-server-core/pom.xml b/cameleer-server-core/pom.xml index 9c959ab3..b93977fd 100644 --- a/cameleer-server-core/pom.xml +++ b/cameleer-server-core/pom.xml @@ -37,6 +37,10 @@ spring-security-core provided + + org.apache.httpcomponents.client5 + httpclient5 + com.fasterxml.jackson.datatype jackson-datatype-jsr310 diff --git a/cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpClientFactory.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpClientFactory.java new file mode 100644 index 00000000..64bf0f35 --- /dev/null +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpClientFactory.java @@ -0,0 +1,8 @@ +package com.cameleer.server.core.http; + +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; + +public interface OutboundHttpClientFactory { + /** Returns a memoized client configured for the given TLS/timeout context. */ + CloseableHttpClient clientFor(OutboundHttpRequestContext context); +} diff --git a/cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpProperties.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpProperties.java new file mode 100644 index 00000000..cb586ef9 --- /dev/null +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpProperties.java @@ -0,0 +1,20 @@ +package com.cameleer.server.core.http; + +import java.time.Duration; +import java.util.List; + +public record OutboundHttpProperties( + boolean trustAll, + List trustedCaPemPaths, + Duration defaultConnectTimeout, + Duration defaultReadTimeout, + String proxyUrl, + String proxyUsername, + String proxyPassword +) { + public OutboundHttpProperties { + trustedCaPemPaths = trustedCaPemPaths == null ? List.of() : List.copyOf(trustedCaPemPaths); + if (defaultConnectTimeout == null) defaultConnectTimeout = Duration.ofMillis(2000); + if (defaultReadTimeout == null) defaultReadTimeout = Duration.ofMillis(5000); + } +} diff --git a/cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpRequestContext.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpRequestContext.java new file mode 100644 index 00000000..a09ef217 --- /dev/null +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/http/OutboundHttpRequestContext.java @@ -0,0 +1,20 @@ +package com.cameleer.server.core.http; + +import java.time.Duration; +import java.util.List; + +public record OutboundHttpRequestContext( + TrustMode trustMode, + List trustedCaPemPaths, + Duration connectTimeout, + Duration readTimeout +) { + public OutboundHttpRequestContext { + if (trustMode == null) trustMode = TrustMode.SYSTEM_DEFAULT; + trustedCaPemPaths = trustedCaPemPaths == null ? List.of() : List.copyOf(trustedCaPemPaths); + } + + public static OutboundHttpRequestContext systemDefault() { + return new OutboundHttpRequestContext(TrustMode.SYSTEM_DEFAULT, List.of(), null, null); + } +} diff --git a/cameleer-server-core/src/main/java/com/cameleer/server/core/http/TrustMode.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/http/TrustMode.java new file mode 100644 index 00000000..a1db2e8c --- /dev/null +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/http/TrustMode.java @@ -0,0 +1,7 @@ +package com.cameleer.server.core.http; + +public enum TrustMode { + SYSTEM_DEFAULT, + TRUST_ALL, + TRUST_PATHS +}