|
@@ -9,10 +9,14 @@ import java.net.URL
|
|
|
import java.security.SecureRandom
|
|
import java.security.SecureRandom
|
|
|
import javax.net.ssl.HttpsURLConnection
|
|
import javax.net.ssl.HttpsURLConnection
|
|
|
import javax.net.ssl.SSLContext
|
|
import javax.net.ssl.SSLContext
|
|
|
|
|
+import javax.net.ssl.SSLSocketFactory
|
|
|
import javax.net.ssl.TrustManager
|
|
import javax.net.ssl.TrustManager
|
|
|
import javax.net.ssl.TrustManagerFactory
|
|
import javax.net.ssl.TrustManagerFactory
|
|
|
|
|
|
|
|
-class HttpInterfaceImpl(private val verboseLoggingFlow: Flow<Boolean>) : HttpInterface {
|
|
|
|
|
|
|
+class HttpInterfaceImpl(
|
|
|
|
|
+ private val verboseLoggingFlow: Flow<Boolean>,
|
|
|
|
|
+ private val ignoreTLSCertificateFlow: Flow<Boolean>
|
|
|
|
|
+) : HttpInterface {
|
|
|
companion object {
|
|
companion object {
|
|
|
private const val TAG = "HttpInterfaceImpl"
|
|
private const val TAG = "HttpInterfaceImpl"
|
|
|
}
|
|
}
|
|
@@ -36,9 +40,6 @@ class HttpInterfaceImpl(private val verboseLoggingFlow: Flow<Boolean>) : HttpInt
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- val sslContext = SSLContext.getInstance("TLS")
|
|
|
|
|
- sslContext.init(null, trustManagers, SecureRandom())
|
|
|
|
|
-
|
|
|
|
|
val conn = parsedUrl.openConnection() as HttpsURLConnection
|
|
val conn = parsedUrl.openConnection() as HttpsURLConnection
|
|
|
conn.connectTimeout = 2000
|
|
conn.connectTimeout = 2000
|
|
|
|
|
|
|
@@ -47,7 +48,7 @@ class HttpInterfaceImpl(private val verboseLoggingFlow: Flow<Boolean>) : HttpInt
|
|
|
conn.readTimeout = 1000
|
|
conn.readTimeout = 1000
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- conn.sslSocketFactory = sslContext.socketFactory
|
|
|
|
|
|
|
+ conn.sslSocketFactory = getSocketFactory()
|
|
|
conn.requestMethod = "POST"
|
|
conn.requestMethod = "POST"
|
|
|
conn.doInput = true
|
|
conn.doInput = true
|
|
|
conn.doOutput = true
|
|
conn.doOutput = true
|
|
@@ -79,6 +80,18 @@ class HttpInterfaceImpl(private val verboseLoggingFlow: Flow<Boolean>) : HttpInt
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private fun getSocketFactory(): SSLSocketFactory {
|
|
|
|
|
+ val trustManagers =
|
|
|
|
|
+ if (runBlocking { ignoreTLSCertificateFlow.first() }) {
|
|
|
|
|
+ arrayOf(IgnoreTLSCertificate())
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.trustManagers
|
|
|
|
|
+ }
|
|
|
|
|
+ val sslContext = SSLContext.getInstance("TLS")
|
|
|
|
|
+ sslContext.init(null, trustManagers, SecureRandom())
|
|
|
|
|
+ return sslContext.socketFactory
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
override fun usePublicKeyIds(pkids: Array<String>) {
|
|
override fun usePublicKeyIds(pkids: Array<String>) {
|
|
|
val trustManagerFactory = TrustManagerFactory.getInstance("PKIX").apply {
|
|
val trustManagerFactory = TrustManagerFactory.getInstance("PKIX").apply {
|
|
|
init(keyIdToKeystore(pkids))
|
|
init(keyIdToKeystore(pkids))
|