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