From 987f8eb112d888423cb273f024d9dffaf32c526d Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Wed, 18 Nov 2020 17:28:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=89=93=E5=8C=85=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/config/index.js | 3 +- packages/core/start/mitmproxy.js | 3 ++ .../extra}/scripts/github.script | 0 .../extra}/scripts/global.script | 0 .../extra}/scripts/jquery.min.js | 0 packages/gui/src/bridge/mitmproxy.js | 8 ++++++ packages/gui/src/view/modules/update/index.js | 1 + .../src/lib/interceptor/impl/script.js | 28 +++++++++++-------- packages/mitmproxy/src/lib/monkey/grants.js | 8 ------ packages/mitmproxy/src/lib/monkey/index.js | 19 +++++++------ .../middleware/InsertScriptMiddleware.js | 4 +-- .../proxy/mitmproxy/createRequestHandler.js | 5 ++-- .../src/lib/proxy/mitmproxy/index.js | 7 +++-- packages/mitmproxy/src/options.js | 3 +- 14 files changed, 52 insertions(+), 37 deletions(-) rename packages/{mitmproxy/src/lib/monkey => gui/extra}/scripts/github.script (100%) rename packages/{mitmproxy/src/lib/monkey => gui/extra}/scripts/global.script (100%) rename packages/{mitmproxy/src/lib/monkey => gui/extra}/scripts/jquery.min.js (100%) delete mode 100644 packages/mitmproxy/src/lib/monkey/grants.js diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index d305c2a8..756e4b76 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -3,7 +3,8 @@ module.exports = { enabled: true, port: 1181, setting: { - NODE_TLS_REJECT_UNAUTHORIZED: true + NODE_TLS_REJECT_UNAUTHORIZED: true, + scriptDir: '../../../scripts/' }, intercepts: { 'github.com': { diff --git a/packages/core/start/mitmproxy.js b/packages/core/start/mitmproxy.js index 195df533..428aa196 100644 --- a/packages/core/start/mitmproxy.js +++ b/packages/core/start/mitmproxy.js @@ -1,4 +1,7 @@ // eslint-disable-next-line no-unused-vars const server = require('@docmirror/mitmproxy') const config = JSON.parse(process.argv[2]) +const path = require('path') +const scriptDir = '../../gui/extra/scripts/' +config.setting.scriptDir = path.join(__dirname, scriptDir) server.start(config) diff --git a/packages/mitmproxy/src/lib/monkey/scripts/github.script b/packages/gui/extra/scripts/github.script similarity index 100% rename from packages/mitmproxy/src/lib/monkey/scripts/github.script rename to packages/gui/extra/scripts/github.script diff --git a/packages/mitmproxy/src/lib/monkey/scripts/global.script b/packages/gui/extra/scripts/global.script similarity index 100% rename from packages/mitmproxy/src/lib/monkey/scripts/global.script rename to packages/gui/extra/scripts/global.script diff --git a/packages/mitmproxy/src/lib/monkey/scripts/jquery.min.js b/packages/gui/extra/scripts/jquery.min.js similarity index 100% rename from packages/mitmproxy/src/lib/monkey/scripts/jquery.min.js rename to packages/gui/extra/scripts/jquery.min.js diff --git a/packages/gui/src/bridge/mitmproxy.js b/packages/gui/src/bridge/mitmproxy.js index 195df533..ea553e99 100644 --- a/packages/gui/src/bridge/mitmproxy.js +++ b/packages/gui/src/bridge/mitmproxy.js @@ -1,4 +1,12 @@ // eslint-disable-next-line no-unused-vars const server = require('@docmirror/mitmproxy') const config = JSON.parse(process.argv[2]) +const path = require('path') +const log = require('../utils/util.log') +let scriptDir = '../extra/scripts/' +if (process.env.NODE_ENV === 'development') { + scriptDir = '../extra/scripts/' +} +config.setting.scriptDir = path.join(__dirname, scriptDir) +log.debug('scriptDir', config.setting.scriptDir) server.start(config) diff --git a/packages/gui/src/view/modules/update/index.js b/packages/gui/src/view/modules/update/index.js index 376911ea..f7eb6c9f 100644 --- a/packages/gui/src/view/modules/update/index.js +++ b/packages/gui/src/view/modules/update/index.js @@ -49,6 +49,7 @@ function install (app, api) { updateParams.newVersion = true if (updateParams.autoDownload !== false) { + app.$message.info('发现新版本,正在下载中...') api.update.downloadUpdate() return } diff --git a/packages/mitmproxy/src/lib/interceptor/impl/script.js b/packages/mitmproxy/src/lib/interceptor/impl/script.js index 19de3ce0..a28468ed 100644 --- a/packages/mitmproxy/src/lib/interceptor/impl/script.js +++ b/packages/mitmproxy/src/lib/interceptor/impl/script.js @@ -14,23 +14,27 @@ function getScript (key, script) { module.exports = { responseIntercept (context, interceptOpt, req, res, proxyReq, proxyRes, ssl, next) { - const { rOptions, log } = context + const { rOptions, log, setting } = context let keys = interceptOpt.script if (typeof keys === 'string') { keys = [keys] } - let tags = getScript('global', monkey.get().global.script) - for (const key of keys) { - const script = monkey.get()[key] - if (script == null) { - continue + try { + let tags = getScript('global', monkey.get(setting.scriptDir).global.script) + for (const key of keys) { + const script = monkey.get(setting.scriptDir)[key] + if (script == null) { + continue + } + const scriptTag = getScript(key, script.script) + tags += '\r\n' + scriptTag } - const scriptTag = getScript(key, script.script) - tags += '\r\n' + scriptTag - } - log.info('responseIntercept: insert script', rOptions.hostname, rOptions.path) - return { - head: tags + log.info('responseIntercept: insert script', rOptions.hostname, rOptions.path) + return { + head: tags + } + } catch (err) { + log.error('load monkey script error', err) } }, is (interceptOpt) { diff --git a/packages/mitmproxy/src/lib/monkey/grants.js b/packages/mitmproxy/src/lib/monkey/grants.js deleted file mode 100644 index 2678a759..00000000 --- a/packages/mitmproxy/src/lib/monkey/grants.js +++ /dev/null @@ -1,8 +0,0 @@ -const Monkey_Grants = { - GM_registerMenuCommand: () => {}, - GM_unregisterMenuCommand: () => {}, - GM_openInTab: () => {}, - GM_getValue: () => {}, - GM_setValue: () => {}, - GM_notification: () => {} -} diff --git a/packages/mitmproxy/src/lib/monkey/index.js b/packages/mitmproxy/src/lib/monkey/index.js index 8fd3b836..4f3efdfe 100644 --- a/packages/mitmproxy/src/lib/monkey/index.js +++ b/packages/mitmproxy/src/lib/monkey/index.js @@ -1,5 +1,6 @@ const fs = require('fs') const path = require('path') +const log = require('../../utils/util.log') let scripts function buildScript (sc, content) { @@ -54,22 +55,24 @@ function loadScript (content) { return sc } -function readFile (script) { - return fs.readFileSync(path.join(__dirname, './scripts/' + script)).toString() +function readFile (rootDir, script) { + const location = path.join(rootDir, './' + script) + log.debug('script location:', location) + return fs.readFileSync(location).toString() } const api = { - get () { + get (rootDir) { if (scripts == null) { - api.load() + api.load(rootDir) } return scripts }, - load () { + load (rootDir) { scripts = {} - scripts.github = loadScript(readFile('github.script')) - scripts.jquery = { script: readFile('jquery.min.js') } - scripts.global = { script: readFile('global.script') } + scripts.github = loadScript(readFile(rootDir, 'github.script')) + scripts.jquery = { script: readFile(rootDir, 'jquery.min.js') } + scripts.global = { script: readFile(rootDir, 'global.script') } return scripts } } diff --git a/packages/mitmproxy/src/lib/proxy/middleware/InsertScriptMiddleware.js b/packages/mitmproxy/src/lib/proxy/middleware/InsertScriptMiddleware.js index a85925f6..eb245772 100644 --- a/packages/mitmproxy/src/lib/proxy/middleware/InsertScriptMiddleware.js +++ b/packages/mitmproxy/src/lib/proxy/middleware/InsertScriptMiddleware.js @@ -63,14 +63,14 @@ const monkey = require('../../monkey') module.exports = { requestIntercept (context, req, res, ssl, next) { - const { rOptions, log } = context + const { rOptions, log, setting } = context if (rOptions.path.indexOf(contextPath) !== 0) { return } const urlPath = rOptions.path const filename = urlPath.replace(contextPath, '') - const script = monkey.get()[filename] + const script = monkey.get(setting.scriptDir)[filename] log.info('ds_script', filename, script != null) res.writeHead(200) diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js index 2c3a5774..f0ce1767 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js @@ -9,7 +9,7 @@ const InsertScriptMiddleware = require('../middleware/InsertScriptMiddleware') const defaultDns = require('dns') const MAX_SLOW_TIME = 8000 // 超过此时间 则认为太慢了 // create requestHandler function -module.exports = function createRequestHandler (createIntercepts, externalProxy, dnsConfig) { +module.exports = function createRequestHandler (createIntercepts, externalProxy, dnsConfig, setting) { // return return function requestHandler (req, res, ssl) { let proxyReq @@ -25,7 +25,8 @@ module.exports = function createRequestHandler (createIntercepts, externalProxy, const context = { rOptions, log, - RequestCounter + RequestCounter, + setting } let interceptors = createIntercepts(context) if (interceptors == null) { diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/index.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/index.js index 5a9061d2..4ac2da05 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/index.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/index.js @@ -16,7 +16,8 @@ module.exports = { getCertSocketTimeout = 1 * 1000, middlewares = [], externalProxy, - dnsConfig + dnsConfig, + setting }, callback) { // Don't reject unauthorized // process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' @@ -34,9 +35,9 @@ module.exports = { port = ~~port const requestHandler = createRequestHandler( createIntercepts, - middlewares, externalProxy, - dnsConfig + dnsConfig, + setting ) const upgradeHandler = createUpgradeHandler() diff --git a/packages/mitmproxy/src/options.js b/packages/mitmproxy/src/options.js index 32d432eb..b85b8d74 100644 --- a/packages/mitmproxy/src/options.js +++ b/packages/mitmproxy/src/options.js @@ -2,6 +2,7 @@ const interceptors = require('./lib/interceptor') const dnsUtil = require('./lib/dns') const lodash = require('lodash') const log = require('./utils/util.log') +const path = require('path') function matchHostname (hostMap, hostname) { const value = hostMap[hostname] if (value) { @@ -47,13 +48,13 @@ module.exports = (config) => { const dnsMapping = config.dns.mapping const serverConfig = config - return { port: serverConfig.port, dnsConfig: { providers: dnsUtil.initDNS(serverConfig.dns.providers), mapping: dnsMapping }, + setting: serverConfig.setting, sslConnectInterceptor: (req, cltSocket, head) => { const hostname = req.url.split(':')[0] const inWhiteList = matchHostname(whiteList, hostname) != null