From f142f8d958674339d6ece7030afd1596ede03670 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Thu, 30 Jun 2022 11:02:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=80=9A=E9=81=93`webhook`=E6=94=AF=E6=8C=81HTTP=E5=9F=BA?= =?UTF-8?q?=E6=9C=AC=E8=AE=A4=E8=AF=81=20=E3=80=90=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=EF=BC=9Ahttp://username:password@domain.com/uri=E3=80=91=20#17?= =?UTF-8?q?5=20=E4=BC=98=E5=8C=96=EF=BC=9A=E5=8F=91=E9=80=81=E9=80=9A?= =?UTF-8?q?=E9=81=93`=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1=E5=BA=94?= =?UTF-8?q?=E7=94=A8`=E8=8E=B7=E5=8F=96access=5Ftoken=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E6=97=B6=E8=AE=B0=E5=BD=95=E9=94=99=E8=AF=AF=E6=97=A5=E5=BF=97?= =?UTF-8?q?=20=E4=BC=98=E5=8C=96=EF=BC=9A=E5=8F=91=E9=80=81=E9=80=9A?= =?UTF-8?q?=E9=81=93`=E7=9F=AD=E4=BF=A1`=E5=8F=91=E9=80=81=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=9C=AA=E6=8E=88=E6=9D=83/=E4=BB=85=E5=BD=93?= =?UTF-8?q?=E6=97=A0=E7=BD=91=E7=BB=9C=E5=90=AF=E7=94=A8=E6=97=B6=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E9=94=99=E8=AF=AF=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../idormy/sms/forwarder/utils/CertUtils.kt | 2 + .../sms/forwarder/utils/sender/BarkUtils.kt | 5 +- .../forwarder/utils/sender/DingtalkUtils.kt | 5 +- .../sms/forwarder/utils/sender/EmailUtils.kt | 4 +- .../sms/forwarder/utils/sender/FeishuUtils.kt | 5 +- .../sms/forwarder/utils/sender/GotifyUtils.kt | 5 +- .../forwarder/utils/sender/PushplusUtils.kt | 5 +- .../utils/sender/RetryInterceptor.kt | 88 -------- .../forwarder/utils/sender/ServerchanUtils.kt | 5 +- .../sms/forwarder/utils/sender/SmsUtils.kt | 13 +- .../forwarder/utils/sender/TelegramUtils.kt | 5 +- .../forwarder/utils/sender/WebhookUtils.kt | 205 ++++++++---------- .../utils/sender/WeworkAgentUtils.kt | 12 +- .../utils/sender/WeworkRobotUtils.kt | 5 +- 14 files changed, 115 insertions(+), 249 deletions(-) delete mode 100644 app/src/main/java/com/idormy/sms/forwarder/utils/sender/RetryInterceptor.kt diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.kt index b477859c..89422181 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.kt @@ -7,8 +7,10 @@ import java.security.cert.X509Certificate import java.util.* import javax.net.ssl.* +@Suppress("unused") @SuppressLint("ALL") object CertUtils { + //获取这个SSLSocketFactory val sSLSocketFactory: SSLSocketFactory get() = try { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/BarkUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/BarkUtils.kt index 277eb094..24a5231d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/BarkUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/BarkUtils.kt @@ -84,9 +84,8 @@ class BarkUtils { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -95,10 +94,8 @@ class BarkUtils { val resp = Gson().fromJson(response, BarkResult::class.java) if (resp.code == 200L) { SendUtils.updateLogs(logId, 2, response) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/DingtalkUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/DingtalkUtils.kt index e1e37817..3e6ed0bf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/DingtalkUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/DingtalkUtils.kt @@ -95,9 +95,8 @@ class DingtalkUtils private constructor() { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -106,10 +105,8 @@ class DingtalkUtils private constructor() { val resp = Gson().fromJson(response, DingtalkResult::class.java) if (resp.errcode == 0L) { SendUtils.updateLogs(logId, 2, response) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt index acc8948f..fa2efb21 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt @@ -141,14 +141,12 @@ class EmailUtils { MailSender.getInstance().sendMail(mail, object : MailSender.OnMailSendListener { override fun onError(e: Throwable) { - SendUtils.updateLogs(logId, 0, e.message.toString()) Log.e("MailSender", e.message.toString()) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message.toString()) + SendUtils.updateLogs(logId, 0, e.message.toString()) } override fun onSuccess() { SendUtils.updateLogs(logId, 2, ResUtils.getString(R.string.request_succeeded)) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } }) diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/FeishuUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/FeishuUtils.kt index f0fe2e2c..52fa0d0d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/FeishuUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/FeishuUtils.kt @@ -143,9 +143,8 @@ class FeishuUtils private constructor() { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -154,10 +153,8 @@ class FeishuUtils private constructor() { val resp = Gson().fromJson(response, FeishuResult::class.java) if (resp.code == 0L) { SendUtils.updateLogs(logId, 2, response) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/GotifyUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/GotifyUtils.kt index e7bb2436..3a2f5082 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/GotifyUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/GotifyUtils.kt @@ -62,9 +62,8 @@ class GotifyUtils { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -73,10 +72,8 @@ class GotifyUtils { val resp = Gson().fromJson(response, GotifyResult::class.java) if (resp?.id != null) { SendUtils.updateLogs(logId, 2, response) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/PushplusUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/PushplusUtils.kt index 6449b6d9..bd0b8243 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/PushplusUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/PushplusUtils.kt @@ -79,9 +79,8 @@ class PushplusUtils private constructor() { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -90,10 +89,8 @@ class PushplusUtils private constructor() { val resp = Gson().fromJson(response, PushplusResult::class.java) if (resp.code == 200L) { SendUtils.updateLogs(logId, 2, response) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/RetryInterceptor.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/RetryInterceptor.kt deleted file mode 100644 index 7887f66a..00000000 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/RetryInterceptor.kt +++ /dev/null @@ -1,88 +0,0 @@ -package com.idormy.sms.forwarder.utils.sender - -import android.util.Log -import okhttp3.Interceptor -import okhttp3.Request -import okhttp3.Response -import java.io.IOException -import java.io.InterruptedIOException - -class RetryInterceptor internal constructor(builder: Builder) : Interceptor { - //重试的间隔 - private val retryInterval: Long - - //更新记录ID - private val logId: Long - - //最大重试次数 - private val executionCount: Int - - @Throws(IOException::class) - override fun intercept(chain: Interceptor.Chain): Response { - var retryTimes = 0 - val request = chain.request() - var response: Response - do { - if (retryTimes > 0 && retryInterval > 0) { - val delayTime = retryTimes * retryInterval - try { - Log.w(TAG, "第 $retryTimes 次重试,休眠 $delayTime 秒") - Thread.sleep(delayTime * 1000) - } catch (e: InterruptedException) { - Thread.currentThread().interrupt() - throw InterruptedIOException(e.message) - } - } - response = doRequest(chain, request, retryTimes)!! - retryTimes++ - } while ((!response.isSuccessful) && retryTimes <= executionCount) - - return response - } - - private fun doRequest(chain: Interceptor.Chain, request: Request, retryTimes: Int): Response? { - var response: Response? = null - try { - response = chain.proceed(request) - } catch (e: Exception) { - val resp = if (retryTimes > 0) "第" + retryTimes + "次重试:" + e.message else e.message!! - //LogUtils.updateLog(logId, 1, resp); - Log.w(TAG, resp) - } - return response - } - - class Builder { - var executionCount = 3 - var retryInterval: Long = 1000 - var logId: Long = 0 - fun executionCount(executionCount: Int): Builder { - this.executionCount = executionCount - return this - } - - fun retryInterval(retryInterval: Long): Builder { - this.retryInterval = retryInterval - return this - } - - fun logId(logId: Long): Builder { - this.logId = logId - return this - } - - fun build(): RetryInterceptor { - return RetryInterceptor(this) - } - } - - companion object { - const val TAG = "RetryInterceptor" - } - - init { - executionCount = builder.executionCount - retryInterval = builder.retryInterval - logId = builder.logId - } -} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/ServerchanUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/ServerchanUtils.kt index eb84a1ab..058bdeb2 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/ServerchanUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/ServerchanUtils.kt @@ -57,9 +57,8 @@ class ServerchanUtils { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -68,10 +67,8 @@ class ServerchanUtils { val resp = Gson().fromJson(response, ServerchanResult::class.java) if (resp?.code == 0L) { SendUtils.updateLogs(logId, 2, response) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SmsUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SmsUtils.kt index af17a8f9..7d53ac75 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SmsUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SmsUtils.kt @@ -30,6 +30,12 @@ class SmsUtils { ) { //仅当无网络时启用 && 判断是否真实有网络 if (setting.onlyNoNetwork == true && NetworkUtils.isHaveInternet() && NetworkUtils.isAvailableByPing()) { + SendUtils.updateLogs(logId, 0, ResUtils.getString(R.string.OnlyNoNetwork)) + return + } + + if (ActivityCompat.checkSelfPermission(XUtil.getContext(), Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { + SendUtils.updateLogs(logId, 0, ResUtils.getString(R.string.no_sms_sending_permission)) return } @@ -50,18 +56,11 @@ class SmsUtils { //TODO:取不到卡槽信息时,采用默认卡槽发送 val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1 - - if (ActivityCompat.checkSelfPermission(XUtil.getContext(), Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { - //XToastUtils.error(ResUtils.getString(R.string.no_sms_sending_permission)) - return - } val res: String? = PhoneUtils.sendSms(mSubscriptionId, setting.mobiles, content) if (res == null) { SendUtils.updateLogs(logId, 2, ResUtils.getString(R.string.request_succeeded)) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, res) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + res) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt index 4ad76dc7..4cdede0c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt @@ -110,9 +110,8 @@ class TelegramUtils private constructor() { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -121,10 +120,8 @@ class TelegramUtils private constructor() { val resp = Gson().fromJson(response, TelegramResult::class.java) if (resp.ok == true) { SendUtils.updateLogs(logId, 2, response) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WebhookUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WebhookUtils.kt index 764a339a..0d7cabcf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WebhookUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WebhookUtils.kt @@ -1,7 +1,6 @@ package com.idormy.sms.forwarder.utils.sender import android.annotation.SuppressLint -import android.os.Looper import android.text.TextUtils import android.util.Base64 import android.util.Log @@ -9,17 +8,17 @@ import com.google.gson.Gson import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.setting.WebhookSetting -import com.idormy.sms.forwarder.utils.CertUtils import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SettingUtils +import com.xuexiang.xhttp2.XHttp +import com.xuexiang.xhttp2.cache.model.CacheMode +import com.xuexiang.xhttp2.callback.SimpleCallBack +import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xutil.app.AppUtils -import okhttp3.* -import java.io.IOException import java.net.URLEncoder import java.nio.charset.StandardCharsets import java.text.SimpleDateFormat import java.util.* -import java.util.concurrent.TimeUnit import javax.crypto.Mac import javax.crypto.spec.SecretKeySpec @@ -42,8 +41,8 @@ class WebhookUtils { msgInfo.getContentForSend(SettingUtils.smsTemplate.toString()) } - var webServer: String = setting.webServer //推送地址 - Log.i(TAG, "requestUrl:$webServer") + var requestUrl: String = setting.webServer //推送地址 + Log.i(TAG, "requestUrl:$requestUrl") val timestamp = System.currentTimeMillis() val orgContent: String = msgInfo.content @@ -62,16 +61,25 @@ class WebhookUtils { } var webParams = setting.webParams?.trim() - val requestBuilder: Request.Builder - if (setting.method == "GET" && TextUtils.isEmpty(webParams)) { + + //支持HTTP基本认证(Basic Authentication) + val regex = "^(https?://)([^:]+):([^@]+)@(.+)" + val matches = Regex(regex, RegexOption.IGNORE_CASE).findAll(requestUrl).toList().flatMap(MatchResult::groupValues) + Log.i(TAG, "matches = $matches") + if (matches.isNotEmpty()) { + requestUrl = matches[1] + matches[4] + Log.i(TAG, "requestUrl:$requestUrl") + } + + val request = if (setting.method == "GET" && TextUtils.isEmpty(webParams)) { setting.webServer += (if (setting.webServer.contains("?")) "&" else "?") + "from=" + URLEncoder.encode(from, "UTF-8") - webServer += "&content=" + URLEncoder.encode(content, "UTF-8") - if (!TextUtils.isEmpty(setting.secret)) { - webServer += "×tamp=$timestamp" - webServer += "&sign=$sign" + requestUrl += "&content=" + URLEncoder.encode(content, "UTF-8") + if (!TextUtils.isEmpty(sign)) { + requestUrl += "×tamp=$timestamp" + requestUrl += "&sign=$sign" } - Log.d(TAG, "method = GET, Url = $webServer") - requestBuilder = Request.Builder().url(webServer).get() + Log.d(TAG, "method = GET, Url = $requestUrl") + XHttp.get(requestUrl).keepJson(true) } else if (setting.method == "GET" && !TextUtils.isEmpty(webParams)) { webParams = webParams.toString().replace("[from]", URLEncoder.encode(from, "UTF-8")) .replace("[content]", URLEncoder.encode(content, "UTF-8")) @@ -87,110 +95,83 @@ class WebhookUtils { webParams = webParams.replace("[timestamp]", timestamp.toString()) .replace("[sign]", URLEncoder.encode(sign, "UTF-8")) } - webServer += (if (webServer.contains("?")) "&" else "?") + webParams - Log.d(TAG, "method = GET, Url = $webServer") - requestBuilder = Request.Builder().url(webServer).get() - } else if (webParams != null && !TextUtils.isEmpty(webParams)) { - val bodyMsg: String - var contentType = "application/x-www-form-urlencoded" - if (webParams.startsWith("{")) { - contentType = "application/json;charset=utf-8" - bodyMsg = webParams.replace("[from]", from) - .replace("[content]", escapeJson(content)) - .replace("[msg]", escapeJson(content)) - .replace("[org_content]", escapeJson(orgContent)) - .replace("[device_mark]", escapeJson(deviceMark)) - .replace("[app_version]", appVersion) - .replace("[title]", escapeJson(simInfo)) - .replace("[card_slot]", escapeJson(simInfo)) - .replace("[receive_time]", receiveTime) - .replace("[timestamp]", timestamp.toString()) - .replace("[sign]", sign) + requestUrl += if (webParams.startsWith("/")) { + webParams } else { - bodyMsg = webParams.replace("[from]", URLEncoder.encode(from, "UTF-8")) - .replace("[content]", URLEncoder.encode(content, "UTF-8")) - .replace("[msg]", URLEncoder.encode(content, "UTF-8")) - .replace("[org_content]", URLEncoder.encode(orgContent, "UTF-8")) - .replace("[device_mark]", URLEncoder.encode(deviceMark, "UTF-8")) - .replace("[app_version]", URLEncoder.encode(appVersion, "UTF-8")) - .replace("[title]", URLEncoder.encode(simInfo, "UTF-8")) - .replace("[card_slot]", URLEncoder.encode(simInfo, "UTF-8")) - .replace("[receive_time]", URLEncoder.encode(receiveTime, "UTF-8")) - .replace("[timestamp]", URLEncoder.encode(timestamp.toString(), "UTF-8")) - .replace("[sign]", URLEncoder.encode(sign, "UTF-8")) + (if (requestUrl.contains("?")) "&" else "?") + webParams } - val body = RequestBody.create(MediaType.parse(contentType), bodyMsg) - requestBuilder = Request.Builder() - .url(webServer) - .addHeader("Content-Type", contentType) - .method("POST", body) - Log.d(TAG, "method = POST webParams, Body = $bodyMsg") + Log.d(TAG, "method = GET, Url = $requestUrl") + XHttp.get(requestUrl).keepJson(true) + } else if (webParams != null && webParams.isNotEmpty() && webParams.startsWith("{")) { + val bodyMsg = webParams.replace("[from]", from) + .replace("[content]", escapeJson(content)) + .replace("[msg]", escapeJson(content)) + .replace("[org_content]", escapeJson(orgContent)) + .replace("[device_mark]", escapeJson(deviceMark)) + .replace("[app_version]", appVersion) + .replace("[title]", escapeJson(simInfo)) + .replace("[card_slot]", escapeJson(simInfo)) + .replace("[receive_time]", receiveTime) + .replace("[timestamp]", timestamp.toString()) + .replace("[sign]", sign) + Log.d(TAG, "method = POST, Url = $requestUrl, bodyMsg = $bodyMsg") + XHttp.post(requestUrl).keepJson(true).upJson(bodyMsg) } else { - val builder = MultipartBody.Builder().setType(MultipartBody.FORM) - .addFormDataPart("from", from) - .addFormDataPart("content", content) - if (!TextUtils.isEmpty(setting.secret)) { - builder.addFormDataPart("timestamp", timestamp.toString()) - builder.addFormDataPart("sign", sign) - } - val body: RequestBody = builder.build() - Log.d(TAG, "method = POST, Body = $body") - requestBuilder = Request.Builder().url(webServer).method("POST", body) - } - - for ((key, value) in setting.headers?.entries!!) { - requestBuilder.addHeader(key, value) - } - - val clientBuilder = OkHttpClient.Builder() - - //设置重试拦截器 - val retryTimes: Int = SettingUtils.requestRetryTimes - if (retryTimes > 0) { - val delayTime: Long = SettingUtils.requestDelayTime.toLong() - val retryInterceptor: RetryInterceptor = RetryInterceptor.Builder().executionCount(retryTimes).retryInterval(delayTime).logId(0).build() - clientBuilder.addInterceptor(retryInterceptor) - } - - //忽略https证书 - CertUtils.x509TrustManager?.let { clientBuilder.sslSocketFactory(CertUtils.sSLSocketFactory, it).hostnameVerifier(CertUtils.hostnameVerifier) } - - //设置读取超时时间 - val client = clientBuilder - .readTimeout(SettingUtils.requestTimeout.toLong(), TimeUnit.SECONDS) - .writeTimeout(SettingUtils.requestTimeout.toLong(), TimeUnit.SECONDS) - .connectTimeout(SettingUtils.requestTimeout.toLong(), TimeUnit.SECONDS) - .build() - - client.newCall(requestBuilder.build()).enqueue(object : Callback { - override fun onFailure(call: Call, e: IOException) { - //解决在子线程中调用Toast的异常情况处理 - if (Looper.myLooper() == null) Looper.prepare() - e.printStackTrace() - SendUtils.updateLogs(logId, 0, e.message.toString()) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) - Looper.loop() + if (webParams == null || webParams.isEmpty()) { + webParams = "from=[from]&content=[content]×tamp=[timestamp]" + if (!TextUtils.isEmpty(sign)) webParams += "&sign=[sign]" } - @Throws(IOException::class) - override fun onResponse(call: Call, response: Response) { - val responseStr = response.body().toString() - Log.d(TAG, "Response:" + response.code() + "," + responseStr) - - //返回http状态200即为成功 - if (200 == response.code()) { - if (Looper.myLooper() == null) Looper.prepare() - SendUtils.updateLogs(logId, 2, responseStr) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) - Looper.loop() - } else { - if (Looper.myLooper() == null) Looper.prepare() - SendUtils.updateLogs(logId, 0, responseStr) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) - Looper.loop() + val postRequest = XHttp.post(requestUrl).keepJson(true) + webParams.split("&").forEach { + val param = it.split("=") + if (param.size == 2) { + postRequest.params(param[0], param[1].replace("[from]", from) + .replace("[content]", content) + .replace("[msg]", content) + .replace("[org_content]", orgContent) + .replace("[device_mark]", deviceMark) + .replace("[app_version]", appVersion) + .replace("[title]", simInfo) + .replace("[card_slot]", simInfo) + .replace("[receive_time]", receiveTime) + .replace("[timestamp]", timestamp.toString()) + .replace("[sign]", sign)) } } - }) + postRequest + } + + //添加headers + for ((key, value) in setting.headers?.entries!!) { + request.headers(key, value) + } + + //支持HTTP基本认证(Basic Authentication) + if (matches.isNotEmpty()) { + request.addInterceptor(BasicAuthInterceptor(matches[2], matches[3])) + } + + request.ignoreHttpsCert() //忽略https证书 + .timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s + .cacheMode(CacheMode.NO_CACHE) + .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 + .retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 + .retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 + .timeStamp(true) + .execute(object : SimpleCallBack() { + + override fun onError(e: ApiException) { + Log.e(TAG, e.detailMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) + } + + override fun onSuccess(response: String) { + Log.i(TAG, response) + SendUtils.updateLogs(logId, 2, response) + } + + }) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt index 7da4e91e..544db604 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt @@ -3,6 +3,7 @@ package com.idormy.sms.forwarder.utils.sender import android.text.TextUtils import android.util.Log import com.google.gson.Gson +import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.result.DingtalkResult @@ -15,6 +16,7 @@ import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.cache.model.CacheMode import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.exception.ApiException +import com.xuexiang.xui.utils.ResUtils.getString @Suppress("PrivatePropertyName", "UNUSED_PARAMETER") class WeworkAgentUtils private constructor() { @@ -48,9 +50,8 @@ class WeworkAgentUtils private constructor() { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -62,7 +63,7 @@ class WeworkAgentUtils private constructor() { MMKVUtils.put("expires_in_" + setting.agentID, System.currentTimeMillis() + ((resp.expires_in ?: 7200) - 120) * 1000L) //提前2分钟过期 sendTextMsg(setting, msgInfo, rule, logId) } else { - //XToastUtils.error(String.format(getString(R.string.request_failed_tips), response)) + SendUtils.updateLogs(logId, 0, String.format(getString(R.string.request_failed_tips), response)) } } @@ -107,9 +108,8 @@ class WeworkAgentUtils private constructor() { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -118,10 +118,8 @@ class WeworkAgentUtils private constructor() { val resp = Gson().fromJson(response, DingtalkResult::class.java) if (resp.errcode == 0L) { SendUtils.updateLogs(logId, 2, response) - //XToastUtils.success(getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - //XToastUtils.error(getString(R.string.request_failed) + response) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkRobotUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkRobotUtils.kt index ab85925e..c9916c35 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkRobotUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkRobotUtils.kt @@ -56,9 +56,8 @@ class WeworkRobotUtils private constructor() { .execute(object : SimpleCallBack() { override fun onError(e: ApiException) { - SendUtils.updateLogs(logId, 0, e.displayMessage) Log.e(TAG, e.detailMessage) - //XToastUtils.error(e.displayMessage) + SendUtils.updateLogs(logId, 0, e.displayMessage) } override fun onSuccess(response: String) { @@ -67,10 +66,8 @@ class WeworkRobotUtils private constructor() { val resp = Gson().fromJson(response, WeworkRobotResult::class.java) if (resp.errcode == 0L) { SendUtils.updateLogs(logId, 2, response) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) } }