Skip to content

Instantly share code, notes, and snippets.

@charleston10
Created April 23, 2021 13:07
Show Gist options
  • Save charleston10/f943b3ed8274dae19beff9de52ba4976 to your computer and use it in GitHub Desktop.
Save charleston10/f943b3ed8274dae19beff9de52ba4976 to your computer and use it in GitHub Desktop.
class to be used by enabling charles proxy in react native
import com.facebook.react.modules.network.OkHttpClientFactory
import com.facebook.react.modules.network.ReactCookieJarContainer
import okhttp3.OkHttpClient
import java.security.cert.CertificateException
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
/**
* @setup: OkHttpClientProvider.setOkHttpClientFactory(UnsafeOkHttpClient.clientFactory())
*/
object UnsafeOkHttpClient {
fun clientFactory(): OkHttpClientFactory {
return OkHttpClientFactory {
okHttpClientBuilder()
.cookieJar(ReactCookieJarContainer())
.build()
}
}
private fun okHttpClientBuilder(): OkHttpClient.Builder {
try {
val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
@Throws(CertificateException::class)
override fun checkClientTrusted(chain: Array<java.security.cert.X509Certificate>, authType: String) {
}
@Throws(CertificateException::class)
override fun checkServerTrusted(chain: Array<java.security.cert.X509Certificate>, authType: String) {
}
override fun getAcceptedIssuers(): Array<java.security.cert.X509Certificate> {
return arrayOf()
}
})
val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, trustAllCerts, java.security.SecureRandom())
val sslSocketFactory = sslContext.socketFactory
val builder = OkHttpClient.Builder()
builder.sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager)
builder.hostnameVerifier { _, _ -> true }
return builder
} catch (e: Exception) {
throw RuntimeException(e)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment