Unified Push: Ignore the potential SSL error when the custom gateway is testing

When the Unified Push is enabled, the application checks the potential custom gateway before applying it. If an SSL error happens, the application may ignore this error and keep using this custom gateway. The actual SSL check will be done server side where this gateway is actually used.
This commit is contained in:
Giom Foret 2023-11-15 17:10:44 +01:00
parent 1a941149ab
commit 7c58af735b

View file

@ -26,11 +26,13 @@ import im.vector.app.core.resources.StringProvider
import im.vector.app.core.utils.getApplicationLabel import im.vector.app.core.utils.getApplicationLabel
import org.matrix.android.sdk.api.Matrix import org.matrix.android.sdk.api.Matrix
import org.matrix.android.sdk.api.cache.CacheStrategy import org.matrix.android.sdk.api.cache.CacheStrategy
import org.matrix.android.sdk.api.failure.Failure
import org.matrix.android.sdk.api.util.MatrixJsonParser import org.matrix.android.sdk.api.util.MatrixJsonParser
import org.unifiedpush.android.connector.UnifiedPush import org.unifiedpush.android.connector.UnifiedPush
import timber.log.Timber import timber.log.Timber
import java.net.URL import java.net.URL
import javax.inject.Inject import javax.inject.Inject
import javax.net.ssl.SSLHandshakeException
class UnifiedPushHelper @Inject constructor( class UnifiedPushHelper @Inject constructor(
private val context: Context, private val context: Context,
@ -104,7 +106,11 @@ class UnifiedPushHelper @Inject constructor(
// else, unifiedpush, and pushkey is an endpoint // else, unifiedpush, and pushkey is an endpoint
val gateway = stringProvider.getString(R.string.default_push_gateway_http_url) val gateway = stringProvider.getString(R.string.default_push_gateway_http_url)
val parsed = URL(endpoint) val parsed = URL(endpoint)
val port = if (parsed.port != -1) { ":${parsed.port}" } else { "" } val port = if (parsed.port != -1) {
":${parsed.port}"
} else {
""
}
val custom = "${parsed.protocol}://${parsed.host}${port}/_matrix/push/v1/notify" val custom = "${parsed.protocol}://${parsed.host}${port}/_matrix/push/v1/notify"
Timber.i("Testing $custom") Timber.i("Testing $custom")
try { try {
@ -120,7 +126,13 @@ class UnifiedPushHelper @Inject constructor(
} }
} }
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.d(e, "Cannot try custom gateway") Timber.e(e, "Cannot try custom gateway")
if (e is Failure.NetworkConnection && e.ioException is SSLHandshakeException) {
Timber.w(e, "SSLHandshakeException, ignore this error")
unifiedPushStore.storePushGateway(custom)
onDoneRunnable?.run()
return
}
} }
unifiedPushStore.storePushGateway(gateway) unifiedPushStore.storePushGateway(gateway)
onDoneRunnable?.run() onDoneRunnable?.run()