]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.rest/src/org/simantics/scl/rest/HttpClientUtils.java
Create HTTP(s) client in SCL with certificate verification disabled
[simantics/platform.git] / bundles / org.simantics.scl.rest / src / org / simantics / scl / rest / HttpClientUtils.java
1 package org.simantics.scl.rest;
2
3 import java.security.KeyManagementException;
4 import java.security.NoSuchAlgorithmException;
5 import java.security.cert.X509Certificate;
6 import java.util.concurrent.Future;
7
8 import javax.net.ssl.HostnameVerifier;
9 import javax.net.ssl.SSLContext;
10 import javax.net.ssl.SSLSession;
11 import javax.net.ssl.TrustManager;
12 import javax.net.ssl.X509TrustManager;
13 import javax.ws.rs.client.Client;
14 import javax.ws.rs.client.ClientBuilder;
15 import javax.ws.rs.client.Invocation;
16 import javax.ws.rs.client.InvocationCallback;
17 import javax.ws.rs.core.Configuration;
18 import javax.ws.rs.core.Response;
19
20 import org.glassfish.jersey.client.ClientConfig;
21 import org.glassfish.jersey.media.multipart.MultiPartFeature;
22 import org.simantics.scl.runtime.SCLContext;
23 import org.simantics.scl.runtime.function.Function1;
24 import org.simantics.scl.runtime.tuple.Tuple0;
25
26 public class HttpClientUtils {
27     
28     public static Client buildClient(ClientBuilder clientBuilder) {
29         final ClientConfig clientConfig = new ClientConfig();
30         clientConfig.register(MultiPartFeature.class);
31         return clientBuilder.withConfig((Configuration) clientConfig).build();
32     }
33     
34     public static String statusMessageOf(Response response) {
35         return response.getStatusInfo().getReasonPhrase();
36     }
37     
38     public static Future<Response> asyncInvoke(Invocation invocation, Function1<Response, Tuple0> responseCallback, Function1<Throwable, Tuple0> failureCallback) {
39         SCLContext context = SCLContext.createDerivedContext();
40         
41         return invocation.submit(new InvocationCallback<Response>() {
42
43             @Override
44             public void completed(Response response) {
45                 SCLContext.push(context);
46                 try {
47                     responseCallback.apply(response);
48                 } finally {
49                     SCLContext.pop();
50                 }
51             }
52             
53             @Override
54             public void failed(Throwable throwable) {
55                 SCLContext.push(context);
56                 try {
57                     failureCallback.apply(throwable);
58                 } finally {
59                     SCLContext.pop();
60                 }
61                 
62             }
63         });
64     }
65     
66     public static ClientBuilder trustAllClientBuilder() throws NoSuchAlgorithmException, KeyManagementException {
67         TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
68             public java.security.cert.X509Certificate[] getAcceptedIssuers() {
69                 return null;
70             }
71             public void checkClientTrusted(X509Certificate[] certs, String authType) {
72             }
73             public void checkServerTrusted(X509Certificate[] certs, String authType) {
74             }
75         }
76         };
77
78         SSLContext sc = SSLContext.getInstance("SSL");
79         sc.init(null, trustAllCerts, new java.security.SecureRandom());
80
81         return ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier(new HostnameVerifier() {
82             @Override
83             public boolean verify(String hostname, SSLSession session) {
84                 return true;
85             }
86         });
87     }
88 }