package kc.spark.pixels.android.cloud; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.X509TrustManager; import kc.spark.pixels.android.app.AppConfig; import org.solemnsilence.util.TLog; import android.content.Context; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.squareup.okhttp.OkHttpClient; public class WebHelpers { private static final TLog log = new TLog(WebHelpers.class); private static OkHttpClient okHttpClient; private static Gson gson; private static boolean initialized = false; // should be called during Application.onCreate() to ensure availability public static void initialize(Context ctx) { if (!initialized) { if (AppConfig.useStaging()) { okHttpClient = disableTLSforStaging(); } else { okHttpClient = new OkHttpClient(); } gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create(); initialized = true; } } public static Gson getGson() { return gson; } public static OkHttpClient getOkClient() { return okHttpClient; } private static OkHttpClient disableTLSforStaging() { log.e("WARNING: TLS DISABLED FOR STAGING!"); OkHttpClient client = new OkHttpClient(); client.setHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); try { SSLContext context = SSLContext.getInstance("TLS"); context.init(null, new X509TrustManager[] { 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]; } } }, new SecureRandom()); client.setSslSocketFactory(context.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } return client; } }