diff --git a/.changelog/lang_zh-Hans.json b/.changelog/lang_zh-Hans.json index 87150ffc..9773ae08 100644 --- a/.changelog/lang_zh-Hans.json +++ b/.changelog/lang_zh-Hans.json @@ -14,6 +14,7 @@ "版本历史页面部分系统因字体差别导致统计数据显示不完整的问题" ], "improvement": [ + "http 模块相关方法支持不安全选项参数 (isInsecure/insecure), 用于忽略证书相关异常 _[`issue #417`](http://issues.autojs6.com/417)_", "android.graphics.Paint#setColor 支持正常解析 ColorInt/ColorHex/ColorName 等颜色参数", "内置模块相关方法实参类型的异常消息增加类型摘要信息" ], @@ -676,7 +677,7 @@ "控制台浮动窗口支持拖动标题区域移动窗口位置", "控制台浮动窗口支持脚本结束后自动延迟关闭", "控制台浮动窗口及其 Activity 活动窗口支持双指缩放调整字体大小", - "http 模块相关方法支持超时参数 (timeout)", + "http 模块相关方法支持超时选项参数 (timeout)", "Gradle 构建脚本支持 JDK 版本主动降级 (fallback)", "Gradle 构建脚本支持根据平台类型及版本自动选择合适的构建工具版本 (程度有限)" ], diff --git a/app/src/main/java/org/autojs/autojs/core/http/MutableOkHttp.kt b/app/src/main/java/org/autojs/autojs/core/http/MutableOkHttp.kt index 34369780..97792a1d 100644 --- a/app/src/main/java/org/autojs/autojs/core/http/MutableOkHttp.kt +++ b/app/src/main/java/org/autojs/autojs/core/http/MutableOkHttp.kt @@ -1,9 +1,15 @@ package org.autojs.autojs.core.http +import android.annotation.SuppressLint import android.util.Log import okhttp3.Interceptor import okhttp3.OkHttpClient +import java.security.SecureRandom +import java.security.cert.X509Certificate import java.util.concurrent.TimeUnit +import javax.net.ssl.SSLContext +import javax.net.ssl.TrustManager +import javax.net.ssl.X509TrustManager /** * Created by Stardust on Apr 11, 2018. @@ -12,6 +18,7 @@ import java.util.concurrent.TimeUnit class MutableOkHttp : OkHttpClient() { private var mTimeout = DEFAULT_TIMEOUT + private var mIsInsecure = DEFAULT_IS_INSECURE private var mOkHttpClient: OkHttpClient private val mInterceptors: MutableList = ArrayList() @@ -25,6 +32,13 @@ class MutableOkHttp : OkHttpClient() { muteClient() } + var isInsecure: Boolean + get() = mIsInsecure + set(isInsecure) { + mIsInsecure = isInsecure + muteClient() + } + init { mOkHttpClient = newClient(Builder()) mInterceptors.add(getRetryInterceptor()) @@ -38,6 +52,21 @@ class MutableOkHttp : OkHttpClient() { .readTimeout(timeout, TimeUnit.MILLISECONDS) .writeTimeout(timeout, TimeUnit.MILLISECONDS) .connectTimeout(timeout, TimeUnit.MILLISECONDS) + .also { b -> + if (!isInsecure) return@also + @SuppressLint("CustomX509TrustManager") + val trustAllCerts = arrayOf(object : X509TrustManager { + override fun checkClientTrusted(chain: Array, authType: String) = Unit + override fun checkServerTrusted(chain: Array, authType: String) = Unit + override fun getAcceptedIssuers(): Array = arrayOf() + }) + val sslContext = SSLContext.getInstance("TLS").apply { + init(null, trustAllCerts, SecureRandom()) + } + val trustManager = trustAllCerts.first() as X509TrustManager + b.sslSocketFactory(sslContext.socketFactory, trustManager) + b.hostnameVerifier { _, _ -> true } + } .build() } @@ -66,16 +95,18 @@ class MutableOkHttp : OkHttpClient() { response } + @Suppress("MayBeConstant") companion object { private val TAG = MutableOkHttp::class.java.simpleName @JvmField - @Suppress("MayBeConstant") val DEFAULT_TIMEOUT = 30 * 1000L @JvmField - @Suppress("MayBeConstant") + val DEFAULT_IS_INSECURE = false + + @JvmField val DEFAULT_MAX_RETRIES = 3 } diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/http/Http.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/http/Http.kt index 2766c522..164ddb2f 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/http/Http.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/http/Http.kt @@ -24,6 +24,7 @@ import org.autojs.autojs.extension.AnyExtensions.jsBrief import org.autojs.autojs.extension.ArrayExtensions.toNativeArray import org.autojs.autojs.extension.FlexibleArray import org.autojs.autojs.extension.ScriptableExtensions.prop +import org.autojs.autojs.extension.ScriptableObjectExtensions.inquire import org.autojs.autojs.pio.PFile import org.autojs.autojs.pio.PFileInterface import org.autojs.autojs.runtime.ScriptRuntime @@ -34,6 +35,7 @@ import org.autojs.autojs.runtime.api.augment.continuation.Creator import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException import org.autojs.autojs.util.RhinoUtils import org.autojs.autojs.util.RhinoUtils.UNDEFINED +import org.autojs.autojs.util.RhinoUtils.coerceBoolean import org.autojs.autojs.util.RhinoUtils.coerceIntNumber import org.autojs.autojs.util.RhinoUtils.coerceLongNumber import org.autojs.autojs.util.RhinoUtils.coerceObject @@ -128,6 +130,7 @@ class Http(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { scriptRuntime.http.okhttp.timeout = coerceLongNumber(opt.prop(KEY_TIMEOUT), DEFAULT_TIMEOUT) scriptRuntime.http.okhttp.maxRetries = coerceIntNumber(opt.prop(KEY_MAX_RETRIES), DEFAULT_MAX_RETRIES) + scriptRuntime.http.okhttp.isInsecure = opt.inquire(listOf("isInsecure", "insecure"), ::coerceBoolean, false) val newCall = scriptRuntime.http.client().newCall(buildRequestRhino(url, options)) diff --git a/version.properties b/version.properties index 208426f9..5ac68ec0 100644 --- a/version.properties +++ b/version.properties @@ -20,5 +20,5 @@ RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3 TARGET_SDK_VERSION=35 TARGET_SDK_VERSION_INRT=29 VERSION_BUILD=3293 -VERSION_NAME=6.7.0 Alpha +VERSION_NAME=6.7.0 Alpha2 VSCODE_EXT_REQUIRED_VERSION=1.0.8