Advertisement
zalzondabuzz

Untitled

Sep 17th, 2019
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.62 KB | None | 0 0
  1. package id.jababeka.networks;
  2.  
  3. import android.content.Context;
  4. import android.os.Build;
  5. import android.util.Log;
  6.  
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.security.GeneralSecurityException;
  10. import java.security.KeyManagementException;
  11. import java.security.KeyStore;
  12. import java.security.KeyStoreException;
  13. import java.security.NoSuchAlgorithmException;
  14. import java.security.cert.Certificate;
  15. import java.security.cert.CertificateException;
  16. import java.security.cert.CertificateFactory;
  17. import java.util.ArrayList;
  18. import java.util.Arrays;
  19. import java.util.List;
  20. import java.util.concurrent.TimeUnit;
  21.  
  22. import javax.net.ssl.SSLContext;
  23. import javax.net.ssl.TrustManager;
  24. import javax.net.ssl.TrustManagerFactory;
  25. import javax.net.ssl.X509TrustManager;
  26.  
  27. import id.jababeka.BuildConfig;
  28. import id.jababeka.R;
  29. import id.jababeka.networks.response.model.SelfSigningClientBuilder;
  30. import okhttp3.CertificatePinner;
  31. import okhttp3.ConnectionSpec;
  32. import okhttp3.OkHttpClient;
  33. import okhttp3.TlsVersion;
  34. import okhttp3.logging.HttpLoggingInterceptor;
  35. import retrofit2.Retrofit;
  36. import retrofit2.converter.gson.GsonConverterFactory;
  37.  
  38. /**
  39.  * Created by YS on 07/03/18.
  40.  */
  41.  
  42. public class RetrofitInstance {
  43.  
  44.     // TODO: Need to set the 'good' connection timeout
  45.     private static final String BASE_URL = "https://jsmart.id/api/";
  46. //    private static final String BASE_URL = "http://jababeka.sorot.id/api/";
  47.     private static final Integer connectTimeout = 600;
  48.     private static final Integer readTimeout = 600;
  49.     private static final Integer writeTimeout = 600;
  50.     private static OkHttpClient.Builder httpClientBuilder = null;
  51.  
  52.     public static Retrofit getInstance(Context mContext) {
  53.         httpClientBuilder = new OkHttpClient.Builder()
  54.                 .readTimeout(30, TimeUnit.SECONDS)
  55.                 .connectTimeout(30,TimeUnit.SECONDS)
  56.                 .writeTimeout(30,TimeUnit.SECONDS);
  57.         initHttpLogging();
  58.         initSSL(mContext);
  59.  
  60.         return new Retrofit.Builder()
  61.                 .baseUrl(BASE_URL)
  62.                 .addConverterFactory(GsonConverterFactory.create())
  63.                 .client(enableTls12OnPreLollipop(httpClientBuilder).build())
  64.                 .build();
  65.     }
  66.  
  67. //    private static OkHttpClient getOkHttpClient() {
  68. //        String hostName = "www.jsmart.id";
  69. //        CertificatePinner certificatePinner = new CertificatePinner.Builder()
  70. //                .add(hostName,"sha256/aNpbJHzNvrX5DRCEU//H79R8fEXiT44CU+51Id8egxE=")
  71. //                .build();
  72. //
  73. //        return new OkHttpClient.Builder()
  74. //                .connectTimeout(connectTimeout, TimeUnit.SECONDS)
  75. //                .writeTimeout(writeTimeout, TimeUnit.SECONDS)
  76. //                .readTimeout(readTimeout, TimeUnit.SECONDS)
  77. //                .certificatePinner(certificatePinner)
  78. //                .build();
  79. //    }
  80.  
  81.     private static void initHttpLogging() {
  82.         HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
  83.         logging.setLevel(HttpLoggingInterceptor.Level.BODY);
  84.         if (BuildConfig.DEBUG) httpClientBuilder.addInterceptor(logging);
  85.     }
  86.  
  87.     private static void initSSL(Context context) {
  88.  
  89.         SSLContext sslContext = null;
  90.         try {
  91.             sslContext = (SSLContext) createCertificate(context.getResources().openRawResource(R.raw.certificate));
  92.         } catch (CertificateException | IOException | KeyStoreException | KeyManagementException | NoSuchAlgorithmException e) {
  93.             e.printStackTrace();
  94.         }
  95.  
  96.         if(sslContext!=null){
  97.             httpClientBuilder.sslSocketFactory(sslContext.getSocketFactory(), systemDefaultTrustManager());
  98.         }
  99.  
  100.     }
  101.  
  102.     private static SSLContext createCertificate(InputStream trustedCertificateIS) throws CertificateException, IOException, KeyStoreException, KeyManagementException, NoSuchAlgorithmException{
  103.  
  104.         CertificateFactory cf = CertificateFactory.getInstance("X.509");
  105.         Certificate ca;
  106.         try {
  107.             ca = cf.generateCertificate(trustedCertificateIS);
  108.         } finally {
  109.             trustedCertificateIS.close();
  110.         }
  111.  
  112.         // creating a KeyStore containing our trusted CAs
  113.         String keyStoreType = KeyStore.getDefaultType();
  114.         KeyStore keyStore = KeyStore.getInstance(keyStoreType);
  115.         keyStore.load(null, null);
  116.         keyStore.setCertificateEntry("ca", ca);
  117.  
  118.         // creating a TrustManager that trusts the CAs in our KeyStore
  119.         String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
  120.         TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
  121.         tmf.init(keyStore);
  122.  
  123.         // creating an SSLSocketFactory that uses our TrustManager
  124.         SSLContext sslContext = SSLContext.getInstance("TLS");
  125.         sslContext.init(null, tmf.getTrustManagers(), null);
  126.         return sslContext;
  127.  
  128.     }
  129.  
  130.     private static X509TrustManager systemDefaultTrustManager() {
  131.         try {
  132.             TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
  133.             trustManagerFactory.init((KeyStore) null);
  134.             TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
  135.             if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
  136.                 throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
  137.             }
  138.             return (X509TrustManager) trustManagers[0];
  139.         } catch (GeneralSecurityException e) {
  140.             throw new AssertionError(); // The system has no TLS. Just give up.
  141.         }
  142.     }
  143.  
  144.     private static OkHttpClient.Builder enableTls12OnPreLollipop(OkHttpClient.Builder client) {
  145.         if (Build.VERSION.SDK_INT >= 16 && Build.VERSION.SDK_INT < 22) {
  146.             try {
  147.                 SSLContext sc = SSLContext.getInstance("TLSv1.2");
  148.                 sc.init(null, null, null);
  149.                 client.sslSocketFactory(new Tls12SocketFactory(sc.getSocketFactory()));
  150.                 ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
  151.                         .tlsVersions(TlsVersion.TLS_1_2)
  152.                         .build();
  153.                 List<ConnectionSpec> specs = new ArrayList<>();
  154.                 specs.add(cs);
  155.                 specs.add(ConnectionSpec.COMPATIBLE_TLS);
  156.                 specs.add(ConnectionSpec.CLEARTEXT);
  157.                 client.connectionSpecs(specs);
  158.             } catch (Exception exc) {
  159.                 Log.e("OkHttpTLSCompat", "Error while setting TLS 1.2", exc);
  160.             }
  161.         }
  162.         return client;
  163.     }
  164.  
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement