You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2016/12/05 10:48:45 UTC

tomee git commit: TOMEE-1980 supporting basic.username and basic.password in the http url (provider url)

Repository: tomee
Updated Branches:
  refs/heads/master 52067addf -> 61c6522b3


TOMEE-1980 supporting basic.username and basic.password in the http url (provider url)


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/61c6522b
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/61c6522b
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/61c6522b

Branch: refs/heads/master
Commit: 61c6522b32b7b77ba0ec42b8155bc6863d826121
Parents: 52067ad
Author: rmannibucau <rm...@apache.org>
Authored: Mon Dec 5 11:48:38 2016 +0100
Committer: rmannibucau <rm...@apache.org>
Committed: Mon Dec 5 11:48:38 2016 +0100

----------------------------------------------------------------------
 .../openejb/client/HttpConnectionFactory.java   | 37 +++++++++++++++----
 .../openejb/client/HttpConnectionTest.java      | 38 +++++++++++++++++++-
 2 files changed, 67 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/61c6522b/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java
----------------------------------------------------------------------
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java b/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java
index a623a22..2abca67 100644
--- a/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java
@@ -26,6 +26,7 @@ import java.net.HttpURLConnection;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
 import java.util.Map;
@@ -34,6 +35,8 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.ConcurrentMap;
 
+import static javax.xml.bind.DatatypeConverter.printBase64Binary;
+
 /**
  * @version $Revision$ $Date$
  */
@@ -75,10 +78,26 @@ public class HttpConnectionFactory implements ConnectionFactory {
                 throw new IllegalArgumentException("Invalid uri " + uri.toString(), e);
             }
 
-            final String authorization = params.get("authorization");
+            final String basicUsername = params.get("basic.username");
+            final String basicPassword = params.get("basic.password");
+            final String authorizationHeader = params.get("authorizationHeader");
+            String authorization = params.get("authorization");
+            if (authorization != null && basicUsername != null) {
+                throw new IllegalArgumentException("You can't set basic.* properties AND authorization on the provider url");
+            }
+            if (authorization == null && basicUsername != null) {
+                authorization = "Basic " + printBase64Binary((basicUsername + (basicPassword != null ? ":" + basicPassword : "")).getBytes(StandardCharsets.UTF_8));
+            }
 
-            httpURLConnection = (HttpURLConnection) (authorization == null ?
-                    url : new URL(stripQuery(url.toExternalForm(), "authorization"))).openConnection();
+            final String newUrl =
+                    stripQuery(
+                        stripQuery(
+                            stripQuery(
+                                stripQuery(url.toExternalForm(), "authorization"),
+                        "basic.username"),
+                            "basic.password"),
+                "authorizationHeader");
+            httpURLConnection = (HttpURLConnection) (authorization == null ? url : new URL(newUrl)).openConnection();
             httpURLConnection.setDoOutput(true);
 
             final int timeout;
@@ -94,7 +113,7 @@ public class HttpConnectionFactory implements ConnectionFactory {
                 httpURLConnection.setReadTimeout(Integer.parseInt(params.get("readTimeout")));
             }
             if (authorization != null) {
-                httpURLConnection.setRequestProperty("Authorization", authorization);
+                httpURLConnection.setRequestProperty(authorizationHeader == null ? "Authorization" : authorizationHeader, authorization);
             }
 
             if (params.containsKey("sslKeyStore") || params.containsKey("sslTrustStore")) {
@@ -125,11 +144,15 @@ public class HttpConnectionFactory implements ConnectionFactory {
             String result = url;
             do {
                 final int h = result.indexOf(param + '=');
-                final int end = result.indexOf('&', h);
+                int end = result.indexOf('&', h);
+                if (end < 0) {
+                    end = result.length();
+                }
                 if (h <= 0) {
-                    return result;
+                    return result.endsWith("?") ? result.substring(0, result.length() - 1) : result;
                 }
-                result = result.substring(0, h - 1) + (end < 0 ? "" : result.substring(end + 1, result.length()));
+                result = result.substring(0, h) +
+                        (end < 0 || end == result.length() ? "" : result.substring(end + 1, result.length()));
             } while (true);
         }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/61c6522b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java
----------------------------------------------------------------------
diff --git a/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java
index 1f6717e..4df016a 100644
--- a/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java
+++ b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java
@@ -56,6 +56,10 @@ public class HttpConnectionTest {
                 if (authorization != null) {
                     responseBody.write(authorization.getBytes("UTF-8"));
                 }
+                final String authorization2 = exchange.getRequestHeaders().getFirst("AltAuthorization");
+                if (authorization2 != null) {
+                    responseBody.write(("alt" + authorization2).getBytes("UTF-8"));
+                }
                 responseBody.close();
             }
         });
@@ -132,6 +136,38 @@ public class HttpConnectionTest {
     }
 
     @Test
+    public void httpBasicSpecificConfig() throws URISyntaxException, IOException {
+        final HttpConnectionFactory factory = new HttpConnectionFactory();
+        final String url = "http://localhost:" + server.getAddress().getPort() + "/e?basic.password=pwd&basic.username=test&authorizationHeader=AltAuthorization";
+        for (int i = 0; i < 3; i++) {
+            final Connection connection = factory.getConnection(new URI(url));
+
+            BufferedReader br = null;
+            final StringBuilder sb = new StringBuilder();
+            String line;
+            try {
+                br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+                while ((line = br.readLine()) != null) {
+                    sb.append(line);
+                }
+            } catch (final IOException e) {
+                e.printStackTrace();
+            } finally {
+                if (br != null) {
+                    try {
+                        br.close();
+                    } catch (final IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+                connection.close();
+            }
+
+            Assert.assertTrue("should contain", sb.toString().contains("secure pagealtBasic dGVzdDpwd2Q="));
+        }
+    }
+
+    @Test
     public void complexURIAuthorization() throws IOException, URISyntaxException {
         final String baseHttp = "http://localhost:" + server.getAddress().getPort() + "/e?authorization=";
         final String uri = "failover:sticky+random:" + baseHttp + "Basic%20ABCD&" + baseHttp + "Basic%20EFG";
@@ -157,6 +193,6 @@ public class HttpConnectionTest {
             connection.close();
         }
         final String out = sb.toString();
-        Assert.assertTrue(out, out.contains("secure pageBasic ABCD"));
+        Assert.assertTrue(out, out.contains("secure pagehttp://localhost:" + server.getAddress().getPort() + "/eBasic ABCD"));
     }
 }