From 6d015d8cc092a622db2fab14234d4f1be10871fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Fri, 19 Apr 2024 17:08:23 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E7=AF=A1=E6=94=B9=E7=8C=B4=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=9C=B0=E5=9D=80=EF=BC=8C=E5=8F=AF=E4=BB=A5=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=85=8D=E7=BD=AE=E4=BA=86=20(#301)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/config/index.js | 6 ++- .../src/lib/interceptor/impl/res/script.js | 40 ++++++++++++++----- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index aa17698..35d91fc 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -56,10 +56,14 @@ module.exports = { sni: 'baidu.com' }, '^(/[\\w-.]+){2,}/?(\\?.*)?$': { + // 自定义篡改猴插件地址配置 + tampermonkeyScript: 'https://mirror.ghproxy.com/https://raw.githubusercontent.com/docmirror/dev-sidecar/scripts/tampermonkey.js', + // 脚本地址配置 script: [ + // Github油猴脚本 'https://mirror.ghproxy.com/https://raw.githubusercontent.com/docmirror/dev-sidecar/scripts/github/monkey.js' ], - scriptUrlDesc: '上面所使用的脚本地址,使用了高速镜像地址。', + remark: '注:上面所使用的脚本地址,为高速镜像地址。', desc: '油猴脚本:高速下载 Git Clone/SSH、Release、Raw、Code(ZIP) 等文件 (公益加速)、项目列表单文件快捷下载、添加 git clone 命令' }, // 以下三项暂时先注释掉,因为已经有油猴脚本提供高速下载地址了。 diff --git a/packages/mitmproxy/src/lib/interceptor/impl/res/script.js b/packages/mitmproxy/src/lib/interceptor/impl/res/script.js index cde8f4a..50099e2 100644 --- a/packages/mitmproxy/src/lib/interceptor/impl/res/script.js +++ b/packages/mitmproxy/src/lib/interceptor/impl/res/script.js @@ -63,7 +63,11 @@ module.exports = { } // 插入油猴脚本浏览器扩展 - tags = '\r\n\t' + getScript('tampermonkey', scripts.tampermonkey.script) + tags + if (typeof interceptOpt.tampermonkeyScript === 'string') { + tags = '\r\n\t' + getScriptByUrlOrPath(interceptOpt.tampermonkeyScript) + tags + } else { + tags = '\r\n\t' + getScript('tampermonkey', scripts.tampermonkey.script) + tags + } res.setHeader('DS-Script-Interceptor', 'true') log.info('script response intercept: insert script', rOptions.hostname, rOptions.path, ', head:', tags) @@ -89,23 +93,37 @@ module.exports = { const hostnameConfig = intercepts[hostnamePattern] const scriptProxy = {} + const handleScriptUrl = (scriptUrl, name, replaceScriptUrlFun) => { + if (scriptUrl.indexOf('https:') === 0 || scriptUrl.indexOf('http:') === 0) { + // 绝对地址 + const scriptKey = SCRIPT_PROXY_URL_PRE + scriptUrl.replace('.js', '').replace(/[\W_]+/g, '_') + '.js' // 伪脚本地址:移除 script 中可能存在的特殊字符,并转为相对地址 + scriptProxy[scriptKey] = scriptUrl + log.info(`替换${name}配置值:'${scriptUrl}' -> '${scriptKey}'`) + if (typeof replaceScriptUrlFun === 'function') replaceScriptUrlFun(scriptKey) + } else if (scriptUrl.indexOf('/') === 0) { + // 相对地址 + scriptProxy[scriptUrl] = scriptUrl + } + } + for (const pathPattern in hostnameConfig) { const pathConfig = hostnameConfig[pathPattern] + // 处理 script 配置 if (typeof pathConfig.script === 'object' && pathConfig.script.length > 0) { for (let i = 0; i < pathConfig.script.length; i++) { - const script = pathConfig.script[i] - if (script.indexOf('https:') === 0 || script.indexOf('http:') === 0) { - // 绝对地址 - const scriptKey = SCRIPT_PROXY_URL_PRE + script.replace('.js', '').replace(/[\W_]+/g, '_') + '.js' // 伪脚本地址:移除 script 中可能存在的特殊字符,并转为相对地址 - scriptProxy[scriptKey] = script - log.info(`替换script配置值:'${pathConfig.script[i]}' -> '${scriptKey}'`) + const scriptUrl = pathConfig.script[i] + handleScriptUrl(scriptUrl, 'script', (scriptKey) => { pathConfig.script[i] = scriptKey - } else if (script.indexOf('/') === 0) { - // 相对地址 - scriptProxy[script] = script - } + }) } } + + // 处理 tampermonkeyScript 配置 + if (typeof pathConfig.tampermonkeyScript === 'string') { + handleScriptUrl(pathConfig.tampermonkeyScript, 'tampermonkey', (scriptKey) => { + pathConfig.tampermonkeyScript = scriptKey + }) + } } // 自动创建脚本