You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cs...@apache.org on 2024/11/25 13:38:54 UTC
(sling-org-apache-sling-distribution-core) 01/01: SLING-12460 - Use system proxy for http
This is an automated email from the ASF dual-hosted git repository.
cschneider pushed a commit to branch SLING-12460
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-core.git
commit 91f2f3fbd4aa7a025f29c711627a17be9acfb9bf
Author: Christian Schneider <cs...@adobe.com>
AuthorDate: Mon Nov 25 14:38:31 2024 +0100
SLING-12460 - Use system proxy for http
---
.../impl/SimpleHttpDistributionTransport.java | 34 ++++++++++----------
.../impl/SimpleHttpDistributionTransportTest.java | 36 ++++++++++++++++++++++
2 files changed, 53 insertions(+), 17 deletions(-)
diff --git a/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java b/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
index 663ed2e4..7e994a22 100644
--- a/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
+++ b/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
@@ -31,6 +31,8 @@ import org.apache.http.client.fluent.Request;
import org.apache.http.client.fluent.Response;
import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.entity.ContentType;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.apache.sling.api.resource.ResourceResolver;
@@ -118,7 +120,6 @@ public class SimpleHttpDistributionTransport implements DistributionTransport {
try {
Executor executor = getExecutor(distributionContext);
-
Request req = Request.Post(distributionEndpoint.getUri())
.connectTimeout(httpConfiguration.getConnectTimeout())
.socketTimeout(httpConfiguration.getSocketTimeout())
@@ -215,24 +216,23 @@ public class SimpleHttpDistributionTransport implements DistributionTransport {
return executor;
}
- private Executor buildAuthExecutor(String username, String password) {
- URI uri = distributionEndpoint.getUri();
- Executor executor = Executor.newInstance()
- .auth(new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme()), username, password)
- .authPreemptive(new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme()));
- log.debug("authenticate user={}, endpoint={}", username, uri);
- return executor;
- }
-
- private Executor buildAuthExecutor(Map<String, String> credentialsMap) {
- return (null != credentialsMap && !credentialsMap.containsKey(AUTHORIZATION))
- ? buildAuthExecutor(credentialsMap.get(USERNAME), credentialsMap.get(PASSWORD))
- : Executor.newInstance();
- }
-
private Executor buildExecutor() {
+ CloseableHttpClient client = HttpClients.createSystem();
Map<String, String> credentialsMap = getCredentialsMap();
- return buildAuthExecutor(credentialsMap);
+ if (needsAuthentication(credentialsMap)) {
+ String username = credentialsMap.get(USERNAME);
+ String password = credentialsMap.get(PASSWORD);
+ URI uri = distributionEndpoint.getUri();
+ HttpHost host = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
+ log.debug("authenticate user={}, endpoint={}", username, uri);
+ return Executor.newInstance(client).auth(host, username, password).authPreemptive(host);
+ } else {
+ return Executor.newInstance(client);
+ }
+ }
+
+ private boolean needsAuthentication(Map<String, String> credentialsMap) {
+ return null != credentialsMap && !credentialsMap.containsKey(AUTHORIZATION);
}
private String getAuthSecret() {
diff --git a/src/test/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransportTest.java b/src/test/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransportTest.java
index c8c56e3b..99692baf 100644
--- a/src/test/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransportTest.java
+++ b/src/test/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransportTest.java
@@ -19,19 +19,23 @@
package org.apache.sling.distribution.transport.impl;
import org.apache.http.HttpEntity;
+import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.fluent.Executor;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.fluent.Response;
+import org.apache.http.conn.HttpHostConnectException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.DistributionRequestType;
import org.apache.sling.distribution.SimpleDistributionRequest;
+import org.apache.sling.distribution.common.RecoverableDistributionException;
import org.apache.sling.distribution.log.impl.DefaultDistributionLog;
import org.apache.sling.distribution.packaging.DistributionPackage;
import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.apache.sling.distribution.packaging.impl.InMemoryDistributionPackage;
import org.apache.sling.distribution.transport.DistributionTransportSecret;
import org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
import org.junit.Test;
@@ -42,6 +46,8 @@ import java.net.URI;
import java.util.HashMap;
import java.util.Map;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.mockito.Matchers.any;
@@ -148,4 +154,34 @@ public class SimpleHttpDistributionTransportTest {
RemoteDistributionPackage retrievedPackage = simpleHttpDistributionTransport.retrievePackage(resourceResolver, distributionRequest, distributionContext);
assertNotNull(retrievedPackage);
}
+
+ @Test
+ public void testSetupTransport() throws Exception {
+ System.setProperty("http.proxyHost", "10.0.0.100");
+ System.setProperty("http.proxyPort", "8800");
+
+ DistributionTransportSecret secret = mock(DistributionTransportSecret.class);
+ Map<String, String> credentialsMap = new HashMap<String, String>();
+ credentialsMap.put("username", "foo");
+ credentialsMap.put("password", "foo");
+ when(secret.asCredentialsMap()).thenReturn(credentialsMap);
+ DistributionTransportSecretProvider secretProvider = mock(DistributionTransportSecretProvider.class);
+ when(secretProvider.getSecret(any(URI.class))).thenReturn(secret);
+
+ DistributionEndpoint endpoint = new DistributionEndpoint("http://127.0.0.1:8080/some/resource");
+ DistributionPackageBuilder packageBuilder = mock(DistributionPackageBuilder.class);
+ DistributionPackage distributionPackage = new InMemoryDistributionPackage("myid", "type", new byte[] {}, new HashMap<String, Object>());
+ ResourceResolver resourceResolver = mock(ResourceResolver.class);
+
+ SimpleHttpDistributionTransport transport = new SimpleHttpDistributionTransport(mock(DefaultDistributionLog.class),
+ endpoint, packageBuilder, secretProvider, new HttpConfiguration(1000, 1000));
+ DistributionTransportContext context = new DistributionTransportContext();
+ try {
+ transport.deliverPackage(resourceResolver, distributionPackage, context);
+ } catch (RecoverableDistributionException e) {
+ HttpHostConnectException cause = (HttpHostConnectException)e.getCause();
+ HttpHost host = cause.getHost();
+ assertThat(host.getHostName(), equalTo("127.0.0.1"));
+ }
+ }
}
\ No newline at end of file