You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2013/11/06 14:11:23 UTC

svn commit: r1539331 - in /incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube: Cube.java CubeBuilder.java

Author: rmannibucau
Date: Wed Nov  6 13:11:22 2013
New Revision: 1539331

URL: http://svn.apache.org/r1539331
Log:
allowing to configure basic authent + https for cube client

Modified:
    incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/Cube.java
    incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java

Modified: incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/Cube.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/Cube.java?rev=1539331&r1=1539330&r2=1539331&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/Cube.java (original)
+++ incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/Cube.java Wed Nov  6 13:11:22 2013
@@ -16,6 +16,8 @@
  */
 package org.apache.sirona.cube;
 
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSocketFactory;
 import java.io.OutputStream;
 import java.net.HttpURLConnection;
 import java.net.InetSocketAddress;
@@ -84,6 +86,17 @@ public class Cube {
             final URL url = new URL(config.getCollector());
 
             final HttpURLConnection connection = HttpURLConnection.class.cast(url.openConnection(proxy));
+
+            final SSLSocketFactory socketFactory = config.getSocketFactory();
+            if (socketFactory != null && "https".equals(url.getProtocol())) {
+                HttpsURLConnection.class.cast(connection).setSSLSocketFactory(socketFactory);
+            }
+
+            final String auth = config.getBasicHeader();
+            if (auth != null) {
+                connection.setRequestProperty("Authorization", auth);
+            }
+
             connection.setRequestMethod(POST);
             connection.setRequestProperty(CONTENT_TYPE, APPLICATION_JSON);
             connection.setRequestProperty(CONTENT_LENGTH, Long.toString(payload.length()));

Modified: incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java?rev=1539331&r1=1539330&r2=1539331&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java (original)
+++ incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java Wed Nov  6 13:11:22 2013
@@ -16,10 +16,20 @@
  */
 package org.apache.sirona.cube;
 
+import org.apache.sirona.MonitoringException;
 import org.apache.sirona.configuration.Configuration;
 
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.xml.bind.DatatypeConverter;
+import java.io.FileInputStream;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.security.KeyStore;
 
 @Configuration.AutoSet
 public class CubeBuilder {
@@ -29,6 +39,18 @@ public class CubeBuilder {
     private int proxyPort;
     private String collector;
     private String marker;
+    private SSLSocketFactory socketFactory;
+
+    // ssl config
+    private String sslTrustStore;
+    private String sslTrustStoreType;
+    private String sslTrustStorePassword;
+    private String sslTrustStoreProvider;
+    private String sslKeyStore;
+    private String sslKeyStoreType;
+    private String sslKeyStorePassword;
+    private String sslKeyStoreProvider;
+    private String basicHeader; // user:pwd
 
     public synchronized Cube build() {
         if (marker == null) {
@@ -39,6 +61,24 @@ public class CubeBuilder {
             }
         }
 
+        if (sslKeyStore != null || sslTrustStore != null) {
+            final KeyManager[] keyManagers = createKeyManager();
+            final TrustManager[] trustManagers = createTrustManager();
+            try {
+                final SSLContext sslContext = SSLContext.getInstance("SSL");
+                sslContext.init(keyManagers, trustManagers, new java.security.SecureRandom());
+                socketFactory = sslContext.getSocketFactory();
+            } catch (final Exception e) {
+                throw new MonitoringException(e);
+            }
+        } else {
+            socketFactory = null;
+        }
+
+        if (basicHeader != null) { // compute it
+            basicHeader = "Basic " + DatatypeConverter.printBase64Binary(basicHeader.getBytes());
+        }
+
         return new Cube(this);
     }
 
@@ -58,6 +98,68 @@ public class CubeBuilder {
         return marker;
     }
 
+    public SSLSocketFactory getSocketFactory() {
+        return socketFactory;
+    }
+
+    public String getBasicHeader() {
+        return basicHeader;
+    }
+
+    private TrustManager[] createTrustManager() {
+        if (sslTrustStore == null) {
+            return null;
+        }
+
+        try {
+            KeyStore ks = KeyStore.getInstance(null == sslTrustStoreType ? KeyStore.getDefaultType() : sslTrustStoreType);
+            char[] pwd;
+            if (sslTrustStorePassword != null) {
+                pwd = sslTrustStorePassword.toCharArray();
+            } else {
+                pwd = "changeit".toCharArray();
+            }
+            FileInputStream fis = new FileInputStream(sslTrustStore);
+            try {
+                ks.load(fis, pwd);
+            } finally {
+                fis.close();
+            }
+            TrustManagerFactory tmf = TrustManagerFactory.getInstance(null == sslTrustStoreProvider ? TrustManagerFactory.getDefaultAlgorithm() : sslTrustStoreProvider);
+            tmf.init(ks);
+            return tmf.getTrustManagers();
+        } catch (final Exception e) {
+            throw new MonitoringException(e);
+        }
+    }
+
+    private KeyManager[] createKeyManager() {
+        if (sslKeyStore == null) {
+            return null;
+        }
+
+        try {
+            KeyStore ks = KeyStore.getInstance(null == sslKeyStoreType ? KeyStore.getDefaultType() : sslKeyStoreType);
+            char[] pwd;
+            if (sslKeyStorePassword != null) {
+                pwd = sslKeyStorePassword.toCharArray();
+            } else {
+                pwd = "changeit".toCharArray();
+            }
+            FileInputStream fis = new FileInputStream(sslKeyStore);
+            try {
+                ks.load(fis, pwd);
+            } finally {
+                fis.close();
+            }
+            KeyManagerFactory kmf = KeyManagerFactory.getInstance(null == sslKeyStoreProvider ? KeyManagerFactory.getDefaultAlgorithm() : sslKeyStoreProvider);
+            kmf.init(ks, pwd);
+            return kmf.getKeyManagers();
+        } catch (final Exception e) {
+            throw new MonitoringException(e);
+        }
+    }
+
     @Override
     public String toString() {
         return "CubeBuilder{" + collector + '}';