package com.truckmuncher.app.dagger; import android.app.Application; import android.content.Context; import android.support.annotation.NonNull; import com.facebook.stetho.Stetho; import com.squareup.okhttp.OkHttpClient; import com.truckmuncher.debug.RiseAndShine; import org.apache.http.conn.ssl.AllowAllHostnameVerifier; import java.security.SecureRandom; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import dagger.Module; import dagger.Provides; import timber.log.Timber; @Module(overrides = true, library = true) public class DebugModule { private final Context context; public DebugModule(Application context) { this.context = context; Stetho.initialize( Stetho.newInitializerBuilder(context) .enableDumpapp(Stetho.defaultDumperPluginsProvider(context)) .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(context)) .build()); context.registerActivityLifecycleCallbacks(new RiseAndShine()); } private static void configureSsl(OkHttpClient client) { try { TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } @Override public void checkClientTrusted(@NonNull X509Certificate[] certs, @NonNull String authType) { } @Override public void checkServerTrusted(@NonNull X509Certificate[] certs, @NonNull String authType) { } } }; SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new SecureRandom()); client.setSslSocketFactory(sc.getSocketFactory()); client.setHostnameVerifier(new AllowAllHostnameVerifier()); } catch (Exception e) { Timber.e(e, "Couldn't configure SSL"); } } @Provides public OkHttpClient provideOkHttpClient() { OkHttpClient client = new OkHttpClient(); GlobalModule.configureHttpCache(context, client); configureSsl(client); return client; } }