This is an automated email from the ASF dual-hosted git repository.

cschneider pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-core.git

commit 32f8d671edcfcaacdd32c6907f17b05cf3c7b4cd
Author: Christian Schneider <[email protected]>
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

Reply via email to