|
@@ -29,12 +29,51 @@ import okio.buffer
|
|
|
import okio.sink
|
|
|
import java.io.File
|
|
|
import java.io.IOException
|
|
|
+import java.security.SecureRandom
|
|
|
+import java.security.cert.X509Certificate
|
|
|
+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.X509TrustManager
|
|
|
+import javax.security.cert.CertificateException
|
|
|
|
|
|
|
|
|
+fun getUnsafeOkHttpClient(): OkHttpClient {
|
|
|
+ return try {
|
|
|
+ val trustAllCerts = arrayOf<TrustManager>(
|
|
|
+ object : X509TrustManager {
|
|
|
+ @Throws(CertificateException::class)
|
|
|
+ override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
|
|
|
+ }
|
|
|
+
|
|
|
+ @Throws(CertificateException::class)
|
|
|
+ override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getAcceptedIssuers(): Array<X509Certificate> {
|
|
|
+ return arrayOf()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ val sslContext = SSLContext.getInstance("TLS")
|
|
|
+ sslContext.init(null, trustAllCerts, SecureRandom())
|
|
|
+ val sslSocketFactory: SSLSocketFactory = sslContext.socketFactory
|
|
|
+ val builder = OkHttpClient.Builder()
|
|
|
+ builder.followRedirects(false)
|
|
|
+ builder.sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager)
|
|
|
+ builder.hostnameVerifier(HostnameVerifier { hostname: String?, session: SSLSession? -> true })
|
|
|
+ builder.build()
|
|
|
+ } catch (e: Exception) {
|
|
|
+ throw RuntimeException(e)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
class Network {
|
|
|
|
|
|
fun upload(url: String, file: File, completion: (Boolean) -> Unit) {
|
|
|
- val client = OkHttpClient()
|
|
|
+ val client = getUnsafeOkHttpClient()
|
|
|
val body: RequestBody = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
|
MultipartBody.Builder()
|
|
|
.setType(MultipartBody.FORM)
|
|
@@ -75,7 +114,7 @@ class Network {
|
|
|
}
|
|
|
|
|
|
fun uploadSync(url: String, file: File, onProgress: (Long, Long) -> Unit): Boolean {
|
|
|
- val client = OkHttpClient()
|
|
|
+ val client = getUnsafeOkHttpClient()
|
|
|
val body: RequestBody = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
|
MultipartBody.Builder()
|
|
|
.setType(MultipartBody.FORM)
|
|
@@ -108,7 +147,7 @@ class Network {
|
|
|
}
|
|
|
|
|
|
fun post(url: String, body: String, completion: (Boolean, body: String?) -> Unit) {
|
|
|
- val client = OkHttpClient()
|
|
|
+ val client = getUnsafeOkHttpClient()
|
|
|
val requestBody: RequestBody =
|
|
|
body.toRequestBody("application/x-www-form-urlencoded".toMediaTypeOrNull())
|
|
|
val request: Request = Request.Builder()
|
|
@@ -136,7 +175,27 @@ class Network {
|
|
|
url: String,
|
|
|
onProgress: ((Long, Long) -> Unit) = { _, _ -> }
|
|
|
): Uri? {
|
|
|
+ val trustAllCerts = arrayOf<TrustManager>(
|
|
|
+ object : X509TrustManager {
|
|
|
+ @Throws(CertificateException::class)
|
|
|
+ override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
|
|
|
+ }
|
|
|
+
|
|
|
+ @Throws(CertificateException::class)
|
|
|
+ override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getAcceptedIssuers(): Array<X509Certificate> {
|
|
|
+ return arrayOf()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ val sslContext = SSLContext.getInstance("TLS")
|
|
|
+ sslContext.init(null, trustAllCerts, SecureRandom())
|
|
|
+ val sslSocketFactory: SSLSocketFactory = sslContext.socketFactory
|
|
|
val client = OkHttpClient.Builder()
|
|
|
+ .sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager)
|
|
|
+ .hostnameVerifier(HostnameVerifier { hostname: String?, session: SSLSession? -> true })
|
|
|
.addNetworkInterceptor {
|
|
|
val originalResponse = it.proceed(it.request())
|
|
|
val interceptor = originalResponse.newBuilder()
|