Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.annotation.TargetApi;
- import android.os.Build;
- import android.util.Log;
- import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
- import java.io.IOException;
- import java.security.KeyManagementException;
- import java.security.KeyStore;
- import java.security.KeyStoreException;
- import java.security.NoSuchAlgorithmException;
- 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 javax.security.cert.CertificateException;
- import okhttp3.OkHttpClient;
- import okhttp3.logging.HttpLoggingInterceptor;
- import retrofit2.Retrofit;
- import retrofit2.converter.gson.GsonConverterFactory;
- /**
- * Created by yusuf on 3/2/17.
- */
- public class ServiceFactory {
- public final static int OK = 200;
- public final static int BAD_REQUEST = 400;
- public final static int UNAUTHORIZED = 401;
- public final static int NOT_FOUND = 404;
- public final static int NO_INTERNET = 503;
- public final static int TIME_OUT_CODE = 504;
- public static <T> T createRetrofitService(Class<T> clazz, final String endPoint){
- HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
- logging.setLevel(HttpLoggingInterceptor.Level.BODY);
- OkHttpClient.Builder httpClient = getUnsafeOkHttpClient().newBuilder();
- httpClient.connectTimeout(60, TimeUnit.SECONDS);
- httpClient.addInterceptor(logging);
- // SSL HANDLING
- httpClient.hostnameVerifier(new HostnameVerifier() {
- @Override
- public boolean verify(String hostname, SSLSession session) {
- return true;
- }
- });
- X509TrustManager trustManager = null;
- try {
- 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));
- }
- trustManager = (X509TrustManager) trustManagers[0];
- }catch (Exception err){
- Log.e(Constant.TAG_ERROR, "ServiceFactory #createRetrofitService: "+err.getMessage());
- }
- try {
- if(trustManager!=null) {
- httpClient.sslSocketFactory(getSSLConfig(), trustManager);
- }else{
- Log.e(Constant.TAG_ERROR, "SericeFactory # error");
- }
- }catch (Exception e){
- Log.e(Constant.TAG_ERROR,"ServiceFactory # error "+e.getMessage());
- }
- Retrofit retrofit = new Retrofit.Builder()
- .baseUrl(endPoint)
- .addConverterFactory(GsonConverterFactory.create())
- // .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
- .addCallAdapterFactory(RxErrorHandlingCallAdapterFactory.create())
- .client(httpClient.build())
- .build();
- return retrofit.create(clazz);
- }
- /**
- * ssl configuration
- * @return SSLSocketFactory
- * @throws CertificateException
- * @throws IOException
- * @throws KeyStoreException
- * @throws NoSuchAlgorithmException
- * @throws KeyManagementException
- */
- @TargetApi(Build.VERSION_CODES.KITKAT)
- private static SSLSocketFactory getSSLConfig() throws CertificateException, IOException,
- KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
- // Create a trust manager that does not validate certificate chains
- final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
- @Override
- public void checkClientTrusted(
- java.security.cert.X509Certificate[] chain,
- String authType) throws java.security.cert.CertificateException {
- }
- @Override
- public void checkServerTrusted(
- java.security.cert.X509Certificate[] chain,
- String authType) throws java.security.cert.CertificateException {
- }
- @Override
- public java.security.cert.X509Certificate[] getAcceptedIssuers() {
- return new java.security.cert.X509Certificate[0];
- }
- } };
- // Install the all-trusting trust manager
- final SSLContext sslContext = SSLContext.getInstance("TLS");
- sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
- // Create an ssl socket factory with our all-trusting manager
- return sslContext.getSocketFactory();
- }
- // SSL HANDLING
- public static OkHttpClient getUnsafeOkHttpClient() {
- try {
- // Create a trust manager that does not validate certificate chains
- final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
- @Override
- public void checkClientTrusted(
- java.security.cert.X509Certificate[] chain,
- String authType) {
- }
- @Override
- public void checkServerTrusted(
- java.security.cert.X509Certificate[] chain,
- String authType) {
- }
- @Override
- public java.security.cert.X509Certificate[] getAcceptedIssuers() {
- return new java.security.cert.X509Certificate[0];
- }
- } };
- // Install the all-trusting trust manager
- final SSLContext sslContext = SSLContext.getInstance("TLS");
- sslContext.init(null, trustAllCerts,
- new java.security.SecureRandom());
- // Create an ssl socket factory with our all-trusting manager
- final SSLSocketFactory sslSocketFactory = sslContext
- .getSocketFactory();
- OkHttpClient okHttpClient = new OkHttpClient();
- okHttpClient = okHttpClient.newBuilder()
- .sslSocketFactory(sslSocketFactory)
- .hostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER).build();
- return okHttpClient;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment