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 + '}';