aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/thedevstack/conversationsplus/http/HttpClient.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/thedevstack/conversationsplus/http/HttpClient.java')
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/http/HttpClient.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/main/java/de/thedevstack/conversationsplus/http/HttpClient.java b/src/main/java/de/thedevstack/conversationsplus/http/HttpClient.java
new file mode 100644
index 00000000..e1a38067
--- /dev/null
+++ b/src/main/java/de/thedevstack/conversationsplus/http/HttpClient.java
@@ -0,0 +1,82 @@
+package de.thedevstack.conversationsplus.http;
+
+import org.apache.http.conn.ssl.StrictHostnameVerifier;
+
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.X509TrustManager;
+
+import de.thedevstack.conversationsplus.ConversationsPlusApplication;
+
+import eu.siacs.conversations.utils.CryptoHelper;
+import eu.siacs.conversations.utils.SSLSocketHelper;
+
+import okhttp3.OkHttpClient;
+
+/**
+ * Created by steckbrief on 22.08.2016.
+ */
+public final class HttpClient {
+ private static HttpClient INSTANCE;
+ private boolean interactive = false;
+ private OkHttpClient client;
+
+ public static void init() {
+ INSTANCE = new HttpClient();
+ }
+
+ public static synchronized OkHttpClient getClient(boolean interactive) {
+ if (INSTANCE.interactive != interactive) {
+ INSTANCE.interactive = interactive;
+ INSTANCE.buildClient();
+ }
+ return INSTANCE.client;
+ }
+
+ private HttpClient() {
+ this.buildClient();
+ }
+
+ private void buildClient() {
+ OkHttpClient.Builder builder = new OkHttpClient.Builder();
+ this.initTrustManager(builder);
+ this.client = builder.build();
+ }
+
+ public void initTrustManager(final OkHttpClient.Builder builder) {
+ final X509TrustManager trustManager;
+ final HostnameVerifier hostnameVerifier;
+ if (interactive) {
+ trustManager = ConversationsPlusApplication.getMemorizingTrustManager();
+ hostnameVerifier = ConversationsPlusApplication.getMemorizingTrustManager().wrapHostnameVerifier(
+ new StrictHostnameVerifier());
+ } else {
+ trustManager = ConversationsPlusApplication.getMemorizingTrustManager()
+ .getNonInteractive();
+ hostnameVerifier = ConversationsPlusApplication.getMemorizingTrustManager()
+ .wrapHostnameVerifierNonInteractive(
+ new StrictHostnameVerifier());
+ }
+ try {
+ final SSLContext sc = SSLSocketHelper.getSSLContext();
+ sc.init(null, new X509TrustManager[]{trustManager},
+ ConversationsPlusApplication.getSecureRandom());
+
+ final SSLSocketFactory sf = sc.getSocketFactory();
+ final String[] cipherSuites = CryptoHelper.getOrderedCipherSuites(
+ sf.getSupportedCipherSuites());
+ if (cipherSuites.length > 0) {
+ sc.getDefaultSSLParameters().setCipherSuites(cipherSuites);
+
+ }
+
+ builder.sslSocketFactory(sf, trustManager);
+ builder.hostnameVerifier(hostnameVerifier);
+ } catch (final KeyManagementException | NoSuchAlgorithmException ignored) {
+ }
+ }
+}