Browse Source

feature: 篡改猴插件地址,可以自定义配置了 (#301)

pull/303/head
王良 7 months ago committed by GitHub
parent
commit
6d015d8cc0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      packages/core/src/config/index.js
  2. 40
      packages/mitmproxy/src/lib/interceptor/impl/res/script.js

6
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 命令'
},
// 以下三项暂时先注释掉,因为已经有油猴脚本提供高速下载地址了。

40
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
})
}
}
// 自动创建脚本

Loading…
Cancel
Save