diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/setting/WeworkAgentSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/setting/WeworkAgentSetting.kt index 1384140a..437790ab 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/setting/WeworkAgentSetting.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/setting/WeworkAgentSetting.kt @@ -18,6 +18,7 @@ data class WeworkAgentSetting( val proxyAuthenticator: Boolean? = false, val proxyUsername: String? = "", val proxyPassword: String? = "", + val customizeAPI: String = "https://qyapi.weixin.qq.com/cgi-bin", ) : Serializable { fun getProxyTypeCheckId(): Int { diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/WeworkAgentFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/WeworkAgentFragment.kt index 56decf1d..4c1bf136 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/WeworkAgentFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/WeworkAgentFragment.kt @@ -140,6 +140,7 @@ class WeworkAgentFragment : BaseFragment(), binding!!.sbProxyAuthenticator.isChecked = settingVo.proxyAuthenticator == true binding!!.etProxyUsername.setText(settingVo.proxyUsername) binding!!.etProxyPassword.setText(settingVo.proxyPassword) + binding!!.etCustomizeAPI.setText(settingVo.customizeAPI) } } }) @@ -293,7 +294,12 @@ class WeworkAgentFragment : BaseFragment(), throw Exception(getString(R.string.invalid_username_or_password)) } - return WeworkAgentSetting(corpID, agentID, secret, atAll, toUser, toParty, toTag, proxyType, proxyHost, proxyPort, proxyAuthenticator, proxyUsername, proxyPassword) + val customizeAPI = binding!!.etCustomizeAPI.text.toString().trim() + if (!CommonUtils.checkUrl(customizeAPI, true)) { + throw Exception(getString(R.string.invalid_customize_api)) + } + + return WeworkAgentSetting(corpID, agentID, secret, atAll, toUser, toParty, toTag, proxyType, proxyHost, proxyPort, proxyAuthenticator, proxyUsername, proxyPassword, customizeAPI) } override fun onDestroyView() { 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 ca21e791..bd2cd6db 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 @@ -26,6 +26,7 @@ import java.net.InetSocketAddress import java.net.PasswordAuthentication import java.net.Proxy +@Suppress("DEPRECATION") class WeworkAgentUtils private constructor() { companion object { @@ -46,7 +47,8 @@ class WeworkAgentUtils private constructor() { return sendTextMsg(setting, msgInfo, rule, senderIndex, logId, msgId) } - var getTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?" + val customApi = if (TextUtils.isEmpty(setting.customizeAPI)) "https://qyapi.weixin.qq.com/cgi-bin" else setting.customizeAPI + var getTokenUrl = "$customApi/gettoken?" getTokenUrl += "corpid=" + setting.corpID getTokenUrl += "&corpsecret=" + setting.secret Log.d(TAG, "getTokenUrl:$getTokenUrl") @@ -139,7 +141,8 @@ class WeworkAgentUtils private constructor() { textText["content"] = content textMsgMap["text"] = textText val accessToken: String by SharedPreference("access_token_" + setting.agentID, "") - val requestUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$accessToken" + val customApi = if (TextUtils.isEmpty(setting.customizeAPI)) "https://qyapi.weixin.qq.com/cgi-bin" else setting.customizeAPI + val requestUrl = "$customApi/message/send?access_token=$accessToken" Log.i(TAG, "requestUrl:$requestUrl") val requestMsg: String = Gson().toJson(textMsgMap) Log.i(TAG, "requestMsg:$requestMsg") diff --git a/app/src/main/res/layout/fragment_senders_wework_agent.xml b/app/src/main/res/layout/fragment_senders_wework_agent.xml index 682a7242..def792c8 100644 --- a/app/src/main/res/layout/fragment_senders_wework_agent.xml +++ b/app/src/main/res/layout/fragment_senders_wework_agent.xml @@ -224,7 +224,6 @@ - + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 0f9236d6..2194186c 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -283,8 +283,9 @@ SendKey cannot be empty Up to two channels, multiple channel values separated by a vertical bar | Multiple openids are separated by , - WebServer is empty or not a valid URL - WebHook is empty or not a valid URL + Customize API is invalid + WebServer is empty or invalid + WebHook is empty or invalid URL Scheme is empty or invalid toUser/toParty/toTag cannot be empty or select @all CoreID, AgentID, and Secret cannot be empty @@ -310,6 +311,7 @@ Text Interactive Interactive Title + Customize API Corp ID Agent ID App Secret @@ -323,6 +325,7 @@ Tip: List of member IDs that receive messages (multiple recipients are separated by \'|\', up to 1000) Tip: List of party IDs that receive messages (multiple recipients are separated by \'|\', up to 1000) Tip: List of tag IDs that receive messages (multiple recipients are separated by \'|\', up to 1000) + Tip: Bypass IP whitelist restrictions using reverse proxy (proxy_pass). Tip: The userid of the user who receives the message, up to 20 at a time (separated by \'|\') SendKey Message Channel diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bcba3697..fc661c91 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -284,6 +284,7 @@ Server酱·Turbo版的 SendKey 不能为空 最多两个通道,多个通道值用竖线|隔开 多个 openid 用 , 隔开 + 自定义API地址 不是有效URL WebServer为空 或 不是有效URL WebHook为空 或 不是有效URL URL Scheme 为空 或 无效 @@ -311,6 +312,7 @@ 纯文本 消息卡片 标题模板 + 自定义API 企业ID AgentId Secret @@ -324,6 +326,7 @@ Tip:接收消息的成员ID列表(多个接收者用‘|’分隔,最多支持1000个) Tip:接收消息的部门ID列表(多个接收者用‘|’分隔,最多支持1000个) Tip:接收消息的标签ID列表(多个接收者用‘|’分隔,最多支持1000个) + Tip:通过反向代理(proxy_pass)绕过IP白名单限制 Tip:接收用户的userid,每次最多传20个(用‘|’分隔) SendKey 消息通道