You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2018/12/16 17:16:54 UTC

[httpcomponents-client] 02/02: Better handling of http(s).proxyUser and http(s).proxyPassword

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

olegk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-client.git

commit eac6c062b586196d32b7770d7052148acaf3c276
Author: Jens Borgland <jb...@tibco.com>
AuthorDate: Wed Dec 12 15:58:39 2018 +0100

    Better handling of http(s).proxyUser and http(s).proxyPassword
---
 .../auth/SystemDefaultCredentialsProvider.java     | 51 +++++++++++++++-------
 1 file changed, 35 insertions(+), 16 deletions(-)

diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/SystemDefaultCredentialsProvider.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/SystemDefaultCredentialsProvider.java
index 90e641a..a4c0b0e 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/SystemDefaultCredentialsProvider.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/SystemDefaultCredentialsProvider.java
@@ -135,22 +135,13 @@ public class SystemDefaultCredentialsProvider implements CredentialsStore {
                         protocol, authscope, Authenticator.RequestorType.PROXY, clientContext);
             }
             if (systemcreds == null) {
-                final String proxyHost = System.getProperty(protocol + ".proxyHost");
-                if (proxyHost != null) {
-                    final String proxyPort = System.getProperty(protocol + ".proxyPort");
-                    if (proxyPort != null) {
-                        try {
-                            final AuthScope systemScope = new AuthScope(proxyHost, Integer.parseInt(proxyPort));
-                            if (authscope.match(systemScope) >= 0) {
-                                final String proxyUser = System.getProperty(protocol + ".proxyUser");
-                                if (proxyUser != null) {
-                                    final String proxyPassword = System.getProperty(protocol + ".proxyPassword");
-                                    systemcreds = new PasswordAuthentication(proxyUser, proxyPassword != null ? proxyPassword.toCharArray() : new char[] {});
-                                }
-                            }
-                        } catch (final NumberFormatException ex) {
-                        }
-                    }
+                // Look for values given using http.proxyUser/http.proxyPassword or
+                // https.proxyUser/https.proxyPassword. We cannot simply use the protocol from
+                // the origin since a proxy retrieved from https.proxyHost/https.proxyPort will
+                // still use http as protocol
+                systemcreds = getProxyCredentials("http", authscope);
+                if (systemcreds == null) {
+                    systemcreds = getProxyCredentials("https", authscope);
                 }
             }
             if (systemcreds != null) {
@@ -169,6 +160,34 @@ public class SystemDefaultCredentialsProvider implements CredentialsStore {
         return null;
     }
 
+    private static PasswordAuthentication getProxyCredentials(final String protocol, final AuthScope authscope) {
+        final String proxyHost = System.getProperty(protocol + ".proxyHost");
+        if (proxyHost == null) {
+            return null;
+        }
+        final String proxyPort = System.getProperty(protocol + ".proxyPort");
+        if (proxyPort == null) {
+            return null;
+        }
+
+        try {
+            final AuthScope systemScope = new AuthScope(proxyHost, Integer.parseInt(proxyPort));
+            if (authscope.match(systemScope) >= 0) {
+                final String proxyUser = System.getProperty(protocol + ".proxyUser");
+                if (proxyUser == null) {
+                    return null;
+                }
+                final String proxyPassword = System.getProperty(protocol + ".proxyPassword");
+
+                return new PasswordAuthentication(proxyUser,
+                        proxyPassword != null ? proxyPassword.toCharArray() : new char[] {});
+            }
+        } catch (final NumberFormatException ex) {
+        }
+
+        return null;
+    }
+
     @Override
     public void clear() {
         internal.clear();