From 2b0b37800d46918bfafe6193df7b4df2affafd50 Mon Sep 17 00:00:00 2001 From: avwo Date: Fri, 30 Mar 2018 13:08:03 +0800 Subject: [PATCH] fix: ignore://proxy|socks|http-proxy --- lib/https/index.js | 2 +- lib/rules/rules.js | 15 +++++++++++++-- lib/util/index.js | 16 ++++++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lib/https/index.js b/lib/https/index.js index 3c3c345e2..9cf71d941 100644 --- a/lib/https/index.js +++ b/lib/https/index.js @@ -150,7 +150,7 @@ function _handleWebsocket(socket, clientIp, clientPort, callback, wss) { pluginMgr.getRules(socket, function(rulesMgr) { if (pluginRules = rulesMgr) { util.mergeRules(socket, rulesMgr.resolveRules(fullUrl)); - if (filter.rule) { + if (util.isIgnored(filter, 'rule')) { plugin = null; } else { plugin = pluginMgr.getPluginByRuleUrl(util.rule.getUrl(_rules.rule)); diff --git a/lib/rules/rules.js b/lib/rules/rules.js index 5d498ed34..bc5dfcbf8 100644 --- a/lib/rules/rules.js +++ b/lib/rules/rules.js @@ -769,6 +769,8 @@ proto.resolveFilter = function(url) { util.resolveFilter(ignore, filter); delete filter.filter; delete filter.ignore; + delete filter['ignore|' + filter]; + delete filter['ignore|' + ignore]; return filter; }; proto.resolveDisable = function(url) { @@ -799,10 +801,19 @@ proto.resolveProxy = function resolveProxy(url) { var filter = this.resolveFilter(url); var proxy = getRule(url, this._rules.proxy, this._values); if (proxy) { - var protocol = filter.proxy ? 'proxy:' : (filter.socks ? 'socks:' : ''); - if (protocol && proxy.matcher.indexOf(protocol) === 0) { + if (util.isIgnored(filter, 'proxy')) { return; } + var matcher = proxy.matcher; + if (util.isIgnored(filter, 'socks')) { + if (matcher.indexOf('socks://') === 0) { + return; + } + } else if (util.isIgnored(filter, 'http-proxy')) { + if (matcher.indexOf('proxy://') === 0 || matcher.indexOf('http-proxy://') === 0) { + return; + } + } } return proxy; }; diff --git a/lib/util/index.js b/lib/util/index.js index f5f23cf7e..ac6a0bd98 100644 --- a/lib/util/index.js +++ b/lib/util/index.js @@ -1439,6 +1439,10 @@ function resolveFilter(ignore, filter) { exports.resolveFilter = resolveFilter; +exports.isIgnored = function(filter, name) { + return filter[name] || filter['ignore|' + name]; +}; + function resolveRuleProps(rule, result) { result = result || {}; if (rule) { @@ -1495,11 +1499,19 @@ function ignoreForwardRule(rules, name, exclude) { } function ignoreProxy(rules, name, exclude) { - if (!rules.proxy || (name !== 'proxy' && name !== 'socks')) { + if (!rules.proxy) { + return; + } + if (name === 'proxy') { + delete rules.proxy; + return true; + } + if (name !== 'http-proxy' && name !== 'socks') { return; } var pName = getProtocolName(rules.proxy.url); - if (name === pName && !exclude[pName]) { + if ((name === pName || (name === 'http-proxy' && pName === 'proxy')) + && !exclude[pName]) { delete rules.proxy; } return true;