Skip to content

Commit 5c04a08

Browse files
author
Minnullin Niyaz
committed
Add way to create an unsafe client
1 parent bcad454 commit 5c04a08

6 files changed

Lines changed: 52 additions & 7 deletions

File tree

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
11
package com.piasy.kmp.socketio.engineio.transports
22

3-
import io.ktor.client.HttpClientConfig
43
import io.ktor.client.HttpClient
4+
import io.ktor.client.HttpClientConfig
55
import io.ktor.client.engine.darwin.Darwin
6+
import platform.Foundation.NSURLCredential
7+
import platform.Foundation.NSURLSessionAuthChallengePerformDefaultHandling
8+
import platform.Foundation.NSURLSessionAuthChallengeUseCredential
9+
import platform.Foundation.create
10+
import platform.Foundation.serverTrust
11+
import platform.Security.SecTrustRef
612

7-
actual fun httpClient(config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(Darwin) {
13+
actual fun httpClient(trustAllCerts: Boolean, config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(Darwin) {
814
config(this)
15+
engine {
16+
if (trustAllCerts) {
17+
handleChallenge { session, task, challenge, completionHandler ->
18+
val serverTrust: SecTrustRef? = challenge.protectionSpace.serverTrust
19+
if (serverTrust != null) {
20+
val credential = NSURLCredential.create(trust = serverTrust)
21+
completionHandler(NSURLSessionAuthChallengeUseCredential.toLong(), credential)
22+
} else {
23+
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling.toLong(), null)
24+
}
25+
}
26+
}
27+
}
928
}

kmp-socketio/src/commonMain/kotlin/com/piasy/kmp/socketio/engineio/transports/transport.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import io.ktor.client.statement.*
1111
import io.ktor.http.*
1212
import kotlinx.coroutines.CoroutineScope
1313

14-
expect fun httpClient(config: HttpClientConfig<*>.() -> Unit = {}): HttpClient
14+
expect fun httpClient(trustAllCerts: Boolean = false, config: HttpClientConfig<*>.() -> Unit = {}): HttpClient
1515

1616
internal fun putHeaders(
1717
builder: HeadersBuilder,

kmp-socketio/src/jsMain/kotlin/com/piasy/kmp/socketio/engineio/transports/transport_impl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import io.ktor.client.HttpClientConfig
44
import io.ktor.client.HttpClient
55
import io.ktor.client.engine.js.Js
66

7-
actual fun httpClient(config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(Js) {
7+
actual fun httpClient(trustAllCerts: Boolean, config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(Js) {
88
config(this)
9+
/** Ignore `unsafeClient` variable */
910
}

kmp-socketio/src/jvmMain/kotlin/com/piasy/kmp/socketio/engineio/transports/transport_impl.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,22 @@ package com.piasy.kmp.socketio.engineio.transports
33
import io.ktor.client.HttpClientConfig
44
import io.ktor.client.HttpClient
55
import io.ktor.client.engine.cio.CIO
6+
import java.security.cert.X509Certificate
7+
import javax.net.ssl.X509TrustManager
68

7-
actual fun httpClient(config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(CIO) {
9+
actual fun httpClient(trustAllCerts: Boolean, config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(CIO) {
810
config(this)
11+
if (trustAllCerts) {
12+
engine {
13+
https {
14+
trustManager = object: X509TrustManager {
15+
override fun checkClientTrusted(p0: Array<out X509Certificate>?, p1: String?) { }
16+
17+
override fun checkServerTrusted(p0: Array<out X509Certificate>?, p1: String?) { }
18+
19+
override fun getAcceptedIssuers(): Array<X509Certificate>? = null
20+
}
21+
}
22+
}
23+
}
924
}

kmp-socketio/src/linuxMain/kotlin/com/piasy/kmp/socketio/engineio/transports/transport_impl.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import io.ktor.client.HttpClientConfig
44
import io.ktor.client.HttpClient
55
import io.ktor.client.engine.curl.Curl
66

7-
actual fun httpClient(config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(Curl) {
7+
actual fun httpClient(trustAllCerts: Boolean, config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(Curl) {
88
config(this)
9+
if (trustAllCerts) {
10+
engine {
11+
sslVerify = false
12+
}
13+
}
914
}

kmp-socketio/src/mingwMain/kotlin/com/piasy/kmp/socketio/engineio/transports/transport_impl.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import io.ktor.client.HttpClientConfig
44
import io.ktor.client.HttpClient
55
import io.ktor.client.engine.winhttp.WinHttp
66

7-
actual fun httpClient(config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(WinHttp) {
7+
actual fun httpClient(trustAllCerts: Boolean, config: HttpClientConfig<*>.() -> Unit): HttpClient = HttpClient(WinHttp) {
88
config(this)
9+
if (trustAllCerts) {
10+
engine {
11+
sslVerify = false
12+
}
13+
}
914
}

0 commit comments

Comments
 (0)