| package com.mifos.apache.fineract.data.remote; |
| |
| import android.content.Context; |
| |
| import java.security.KeyStore; |
| import java.security.cert.CertificateException; |
| import java.security.cert.X509Certificate; |
| import java.util.Arrays; |
| import java.util.concurrent.TimeUnit; |
| |
| import javax.net.ssl.HostnameVerifier; |
| import javax.net.ssl.SSLContext; |
| import javax.net.ssl.SSLSession; |
| import javax.net.ssl.SSLSocketFactory; |
| import javax.net.ssl.TrustManager; |
| import javax.net.ssl.TrustManagerFactory; |
| import javax.net.ssl.X509TrustManager; |
| |
| import okhttp3.OkHttpClient; |
| import okhttp3.logging.HttpLoggingInterceptor; |
| import okhttp3.logging.HttpLoggingInterceptor.Level; |
| |
| public class MifosOkHttpClient { |
| |
| private Context context; |
| |
| public MifosOkHttpClient(Context context) { |
| this.context = context; |
| } |
| |
| public OkHttpClient getMifosOkHttpClient() { |
| |
| OkHttpClient.Builder builder = new OkHttpClient.Builder(); |
| |
| try { |
| // Create a trust manager that does not validate certificate chains |
| TrustManager[] trustAllCerts = { |
| new X509TrustManager() { |
| @Override |
| public void checkClientTrusted( |
| X509Certificate[] chain, |
| String authType) throws CertificateException { |
| } |
| |
| @Override |
| public void checkServerTrusted( |
| X509Certificate[] chain, |
| String authType) throws CertificateException { |
| } |
| |
| @Override |
| public X509Certificate[] getAcceptedIssuers() { |
| return new X509Certificate[0]; |
| } |
| } |
| }; |
| |
| // Install the all-trusting trust manager |
| SSLContext sslContext = SSLContext.getInstance("SSL"); |
| sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); |
| // Create an ssl socket factory with our all-trusting manager |
| SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); |
| |
| //Enable Full Body Logging |
| HttpLoggingInterceptor logger = new HttpLoggingInterceptor(); |
| logger.setLevel(Level.BODY); |
| |
| TrustManagerFactory trustManagerFactory = TrustManagerFactory. |
| getInstance(TrustManagerFactory.getDefaultAlgorithm()); |
| trustManagerFactory.init((KeyStore) null); |
| TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); |
| if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { |
| throw new IllegalStateException("Unexpected default trust managers:" + Arrays. |
| toString(trustManagers)); |
| } |
| X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; |
| |
| //Set SSL certificate to OkHttpClient Builder |
| |
| builder.sslSocketFactory(sslSocketFactory, trustManager); |
| |
| builder.hostnameVerifier(new HostnameVerifier() { |
| @Override |
| public boolean verify(String hostname, SSLSession session) { |
| return true; |
| } |
| }); |
| } catch (Exception e) { |
| throw new RuntimeException(e); |
| } |
| |
| //Enable Full Body Logging |
| HttpLoggingInterceptor logger = new HttpLoggingInterceptor(); |
| logger.setLevel(Level.BODY); |
| |
| //Setting Timeout 30 Seconds |
| builder.connectTimeout(60, TimeUnit.SECONDS); |
| builder.readTimeout(60, TimeUnit.SECONDS); |
| |
| //Interceptor :> Full Body Logger and ApiRequest Header |
| builder.addInterceptor(logger); |
| builder.addInterceptor(new MifosInterceptor(context)); |
| builder.addInterceptor(new ReceivedCookiesInterceptor(context)); |
| |
| return builder.build(); |
| |
| } |
| } |