yoesuv

Untitled

Mar 6th, 2022
1,469
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.76 KB | None | 0 0
  1. import android.annotation.TargetApi;
  2. import android.os.Build;
  3. import android.util.Log;
  4.  
  5. import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
  6.  
  7.  
  8. import java.io.IOException;
  9. import java.security.KeyManagementException;
  10. import java.security.KeyStore;
  11. import java.security.KeyStoreException;
  12. import java.security.NoSuchAlgorithmException;
  13. import java.util.Arrays;
  14. import java.util.concurrent.TimeUnit;
  15.  
  16. import javax.net.ssl.HostnameVerifier;
  17. import javax.net.ssl.SSLContext;
  18. import javax.net.ssl.SSLSession;
  19. import javax.net.ssl.SSLSocketFactory;
  20. import javax.net.ssl.TrustManager;
  21. import javax.net.ssl.TrustManagerFactory;
  22. import javax.net.ssl.X509TrustManager;
  23. import javax.security.cert.CertificateException;
  24.  
  25. import okhttp3.OkHttpClient;
  26. import okhttp3.logging.HttpLoggingInterceptor;
  27. import retrofit2.Retrofit;
  28. import retrofit2.converter.gson.GsonConverterFactory;
  29.  
  30. /**
  31.  *  Created by yusuf on 3/2/17.
  32.  */
  33.  
  34. public class ServiceFactory {
  35.  
  36.     public final static int OK = 200;
  37.     public final static int BAD_REQUEST = 400;
  38.     public final static int UNAUTHORIZED = 401;
  39.     public final static int NOT_FOUND = 404;
  40.     public final static int NO_INTERNET = 503;
  41.     public final static int TIME_OUT_CODE = 504;
  42.  
  43.     public static <T> T createRetrofitService(Class<T> clazz, final String endPoint){
  44.  
  45.         HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
  46.         logging.setLevel(HttpLoggingInterceptor.Level.BODY);
  47.  
  48.         OkHttpClient.Builder httpClient = getUnsafeOkHttpClient().newBuilder();
  49.         httpClient.connectTimeout(60, TimeUnit.SECONDS);
  50.         httpClient.addInterceptor(logging);
  51.  
  52. //        SSL HANDLING
  53.         httpClient.hostnameVerifier(new HostnameVerifier() {
  54.             @Override
  55.             public boolean verify(String hostname, SSLSession session) {
  56.                 return true;
  57.             }
  58.         });
  59.  
  60.         X509TrustManager trustManager = null;
  61.         try {
  62.             TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
  63.             trustManagerFactory.init((KeyStore) null);
  64.             TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
  65.             if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
  66.                 throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
  67.             }
  68.             trustManager = (X509TrustManager) trustManagers[0];
  69.         }catch (Exception err){
  70.             Log.e(Constant.TAG_ERROR, "ServiceFactory #createRetrofitService: "+err.getMessage());
  71.         }
  72.  
  73.         try {
  74.             if(trustManager!=null) {
  75.                 httpClient.sslSocketFactory(getSSLConfig(), trustManager);
  76.             }else{
  77.                 Log.e(Constant.TAG_ERROR, "SericeFactory # error");
  78.             }
  79.         }catch (Exception e){
  80.             Log.e(Constant.TAG_ERROR,"ServiceFactory # error "+e.getMessage());
  81.         }
  82.  
  83.         Retrofit retrofit = new Retrofit.Builder()
  84.                 .baseUrl(endPoint)
  85.                 .addConverterFactory(GsonConverterFactory.create())
  86. //                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
  87.                 .addCallAdapterFactory(RxErrorHandlingCallAdapterFactory.create())
  88.                 .client(httpClient.build())
  89.                 .build();
  90.         return  retrofit.create(clazz);
  91.     }
  92.  
  93.     /**
  94.      * ssl configuration
  95.      * @return SSLSocketFactory
  96.      * @throws CertificateException
  97.      * @throws IOException
  98.      * @throws KeyStoreException
  99.      * @throws NoSuchAlgorithmException
  100.      * @throws KeyManagementException
  101.      */
  102.     @TargetApi(Build.VERSION_CODES.KITKAT)
  103.     private static SSLSocketFactory getSSLConfig() throws CertificateException, IOException,
  104.             KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
  105.  
  106.         // Create a trust manager that does not validate certificate chains
  107.         final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
  108.             @Override
  109.             public void checkClientTrusted(
  110.                     java.security.cert.X509Certificate[] chain,
  111.                     String authType) throws java.security.cert.CertificateException {
  112.             }
  113.  
  114.             @Override
  115.             public void checkServerTrusted(
  116.                     java.security.cert.X509Certificate[] chain,
  117.                     String authType) throws java.security.cert.CertificateException {
  118.             }
  119.  
  120.             @Override
  121.             public java.security.cert.X509Certificate[] getAcceptedIssuers() {
  122.                 return new java.security.cert.X509Certificate[0];
  123.             }
  124.         } };
  125.  
  126.         // Install the all-trusting trust manager
  127.         final SSLContext sslContext = SSLContext.getInstance("TLS");
  128.         sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
  129.         // Create an ssl socket factory with our all-trusting manager
  130.  
  131.         return sslContext.getSocketFactory();
  132.     }
  133.  
  134.  
  135. //    SSL HANDLING
  136.  
  137.     public static OkHttpClient getUnsafeOkHttpClient() {
  138.  
  139.         try {
  140.             // Create a trust manager that does not validate certificate chains
  141.             final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
  142.                 @Override
  143.                 public void checkClientTrusted(
  144.                         java.security.cert.X509Certificate[] chain,
  145.                         String authType) {
  146.                 }
  147.  
  148.                 @Override
  149.                 public void checkServerTrusted(
  150.                         java.security.cert.X509Certificate[] chain,
  151.                         String authType) {
  152.                 }
  153.  
  154.                 @Override
  155.                 public java.security.cert.X509Certificate[] getAcceptedIssuers() {
  156.                     return new java.security.cert.X509Certificate[0];
  157.                 }
  158.             } };
  159.  
  160.             // Install the all-trusting trust manager
  161.             final SSLContext sslContext = SSLContext.getInstance("TLS");
  162.             sslContext.init(null, trustAllCerts,
  163.                     new java.security.SecureRandom());
  164.             // Create an ssl socket factory with our all-trusting manager
  165.             final SSLSocketFactory sslSocketFactory = sslContext
  166.                     .getSocketFactory();
  167.  
  168.             OkHttpClient okHttpClient = new OkHttpClient();
  169.             okHttpClient = okHttpClient.newBuilder()
  170.                     .sslSocketFactory(sslSocketFactory)
  171.                     .hostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER).build();
  172.  
  173.             return okHttpClient;
  174.         } catch (Exception e) {
  175.             throw new RuntimeException(e);
  176.         }
  177.  
  178.     }
  179. }
  180.  
Advertisement
Add Comment
Please, Sign In to add comment