]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.rest/src/org/simantics/scl/rest/HttpClientUtils.java
Improvements to SCL HTTP client
[simantics/platform.git] / bundles / org.simantics.scl.rest / src / org / simantics / scl / rest / HttpClientUtils.java
index dfdbf5ba99276892c58f3b629778551af1dfa652..f99b8c47f7e8673755ff1441c19a7695ab2004e8 100644 (file)
@@ -1,11 +1,20 @@
 package org.simantics.scl.rest;
 
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
 import java.util.concurrent.Future;
 
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.Invocation;
 import javax.ws.rs.client.InvocationCallback;
+import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Configuration;
 import javax.ws.rs.core.Response;
 
@@ -20,7 +29,7 @@ public class HttpClientUtils {
     public static Client buildClient(ClientBuilder clientBuilder) {
         final ClientConfig clientConfig = new ClientConfig();
         clientConfig.register(MultiPartFeature.class);
-        return ClientBuilder.newBuilder().withConfig((Configuration) clientConfig).build();
+        return clientBuilder.withConfig((Configuration) clientConfig).build();
     }
     
     public static String statusMessageOf(Response response) {
@@ -54,4 +63,49 @@ public class HttpClientUtils {
             }
         });
     }
+    
+    public static ClientBuilder trustAllClientBuilder() throws NoSuchAlgorithmException, KeyManagementException {
+        TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
+            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+                return null;
+            }
+            public void checkClientTrusted(X509Certificate[] certs, String authType) {
+            }
+            public void checkServerTrusted(X509Certificate[] certs, String authType) {
+            }
+        }
+        };
+
+        SSLContext sc = SSLContext.getInstance("SSL");
+        sc.init(null, trustAllCerts, new java.security.SecureRandom());
+
+        return ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier(new HostnameVerifier() {
+            @Override
+            public boolean verify(String hostname, SSLSession session) {
+                return true;
+            }
+        });
+    }
+    
+    public static void onWriteProgress(WebTarget target, Function1<Long, Tuple0> callback) {
+        target.register(new WriteProgressInterceptor(callback));
+    }
+    
+    public static void onReadProgress(WebTarget target, Function1<Long, Tuple0> callback) {
+        target.register(new ReadProgressInterceptor(callback));
+    }
+    
+    public static Long possibleContentLengthOf(Response response) {
+        String lengthStr = response.getHeaderString("Content-Length");
+        if (lengthStr != null) {
+            try {
+                return Long.parseLong(lengthStr);
+            } catch (NumberFormatException e) {
+                return null;
+            }
+        } else {
+            return null;
+        }
+    }
+
 }