From 0f7a258d2ae2802ac1ed9d2e03faaff2ba548267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Fri, 29 Mar 2024 22:14:09 +0800 Subject: [PATCH] =?UTF-8?q?optimize:=20=E5=9C=A8=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E6=8B=A6=E6=88=AA=E9=85=8D=E7=BD=AE=E6=97=B6=EF=BC=8C=E5=8F=AF?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E5=88=B0=E5=A4=9A=E4=B8=AA=20=E2=80=98?= =?UTF-8?q?=E5=9F=9F=E5=90=8D=E5=8C=B9=E9=85=8D=E7=AC=A6=E2=80=99=20?= =?UTF-8?q?=E4=B8=8B=E7=9A=84=E6=8B=A6=E6=88=AA=E9=85=8D=E7=BD=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/merge.js | 2 +- packages/gui/src/view/components/settings.vue | 2 +- packages/gui/src/view/pages/server.vue | 2 - .../src/lib/proxy/middleware/overwall.js | 2 +- packages/mitmproxy/src/options.js | 2 +- packages/mitmproxy/src/utils/util.match.js | 64 +++++++++++-------- 6 files changed, 41 insertions(+), 33 deletions(-) diff --git a/packages/core/src/merge.js b/packages/core/src/merge.js index 64b760b..3c7888d 100644 --- a/packages/core/src/merge.js +++ b/packages/core/src/merge.js @@ -65,7 +65,7 @@ function doDiff (oldObj, newObj) { function deleteNullItems (target) { lodash.forEach(target, (item, key) => { - if (item == null) { + if (item == null || item === '[delete]') { delete target[key] } if (lodash.isObject(item)) { diff --git a/packages/gui/src/view/components/settings.vue b/packages/gui/src/view/components/settings.vue index f4ac91a..54a47b6 100644 --- a/packages/gui/src/view/components/settings.vue +++ b/packages/gui/src/view/components/settings.vue @@ -17,7 +17,7 @@ :style="{ height: '100%' }" > - +
diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index 229e56e..480a727 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -138,7 +138,6 @@ -
@@ -201,7 +200,6 @@ -
diff --git a/packages/mitmproxy/src/lib/proxy/middleware/overwall.js b/packages/mitmproxy/src/lib/proxy/middleware/overwall.js index 57bf379..7c567d7 100644 --- a/packages/mitmproxy/src/lib/proxy/middleware/overwall.js +++ b/packages/mitmproxy/src/lib/proxy/middleware/overwall.js @@ -18,7 +18,7 @@ function matched (hostname, overWallTargetMap) { log.info(`matchHostname: matched overwall: '${hostname}' -> '${ret}' in pac.txt`) return true } else { - // log.debug(`matchHostname: matched overwall: Not-Matched '${hostname}' -> '${ret}' in pac.txt`) + log.debug(`matchHostname: matched overwall: Not-Matched '${hostname}' -> '${ret}' in pac.txt`) return false } } diff --git a/packages/mitmproxy/src/options.js b/packages/mitmproxy/src/options.js index 644ac52..1a925a3 100644 --- a/packages/mitmproxy/src/options.js +++ b/packages/mitmproxy/src/options.js @@ -70,7 +70,7 @@ module.exports = (config) => { const matchInterceptsOpts = {} for (const regexp in interceptOpts) { // 遍历拦截配置 const interceptOpt = interceptOpts[regexp] - interceptOpt.key = regexp + // interceptOpt.key = regexp if (regexp !== true && regexp !== 'true') { if (!matchUtil.isMatched(rOptions.path, regexp)) { continue diff --git a/packages/mitmproxy/src/utils/util.match.js b/packages/mitmproxy/src/utils/util.match.js index e5ebd6d..b77e80c 100644 --- a/packages/mitmproxy/src/utils/util.match.js +++ b/packages/mitmproxy/src/utils/util.match.js @@ -94,6 +94,16 @@ function merge (oldObj, newObj) { } }) } +function deleteNullItems (target) { + lodash.forEach(target, (item, key) => { + if (item == null || item === '[delete]') { + delete target[key] + } + if (lodash.isObject(item)) { + deleteNullItems(item) + } + }) +} function matchHostnameAll (hostMap, hostname, action) { // log.debug('matchHostnameAll:', action, hostMap) @@ -108,29 +118,9 @@ function matchHostnameAll (hostMap, hostname, action) { } let values = {} - let hasValue = false + let value - // 域名快速匹配:直接匹配 或者 两种前缀通配符匹配 - let value = hostMap.origin[hostname] - if (value) { - log.info(`matchHostnameAll: ${action}: '${hostname}' -> '${hostname}': ${JSON.stringify(value)}`) - values = merge(values, value) - hasValue = true - } - value = hostMap.origin['*' + hostname] - if (value) { - log.info(`matchHostnameAll: ${action}: '${hostname}' -> '*${hostname}': ${JSON.stringify(value)}`) - values = merge(values, value) - hasValue = true - } - value = hostMap.origin['*.' + hostname] - if (value) { - log.info(`matchHostnameAll: ${action}: '${hostname}' -> '*.${hostname}': ${JSON.stringify(value)}`) - values = merge(values, value) - hasValue = true - } - - // 通配符匹配 或 正则表达式匹配 + // 通配符匹配 或 正则表达式匹配(优先级:1,最低) for (const target in hostMap) { if (target === 'origin') { continue @@ -149,17 +139,37 @@ function matchHostnameAll (hostMap, hostname, action) { // 正则表达式匹配 if (hostname.match(regexp)) { value = hostMap[target] - // log.info(`matchHostname: ${action}: '${hostname}' -> '${target}': ${JSON.stringify(value)}`) + log.info(`matchHostnameOne: ${action}: '${hostname}' -> '${target}': ${JSON.stringify(value)}`) values = merge(values, value) - hasValue = true } } - if (hasValue) { - log.info(`*matchHostnameAll*: ${action}: '${hostname}':`, JSON.stringify(values)) + // 域名快速匹配:直接匹配 或者 两种前缀通配符匹配 + // 优先级:2 + value = hostMap.origin['*' + hostname] + if (value) { + log.info(`matchHostnameOne: ${action}: '${hostname}' -> '*${hostname}': ${JSON.stringify(value)}`) + values = merge(values, value) + } + // 优先级:3 + value = hostMap.origin['*.' + hostname] + if (value) { + log.info(`matchHostnameOne: ${action}: '${hostname}' -> '*.${hostname}': ${JSON.stringify(value)}`) + values = merge(values, value) + } + // 优先级:4,最高(注:优先级高的配置,可以覆盖优先级低的配置,甚至有空配置时,可以移除已有配置) + value = hostMap.origin[hostname] + if (value) { + log.info(`matchHostnameOne: ${action}: '${hostname}' -> '${hostname}': ${JSON.stringify(value)}`) + values = merge(values, value) + } + + if (!lodash.isEmpty(values)) { + deleteNullItems(values) + log.info(`matchHostnameAll: ${action}: '${hostname}':`, JSON.stringify(values)) return values } else { - log.debug(`*matchHostnameAll*: ${action}: '${hostname}' Not-Matched`) + log.debug(`matchHostnameAll: ${action}: '${hostname}' Not-Matched`) } }