whistle 2.9.109 → 2.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/js/log.js +8 -4
- package/bin/util.js +1 -1
- package/biz/index.js +12 -10
- package/biz/webui/cgi-bin/certs/active.js +6 -0
- package/biz/webui/cgi-bin/certs/remove.js +0 -1
- package/biz/webui/cgi-bin/certs/upload.js +0 -1
- package/biz/webui/cgi-bin/util.js +7 -20
- package/biz/webui/htdocs/index.html +1 -1
- package/biz/webui/htdocs/js/index.js +43 -43
- package/biz/webui/lib/index.js +10 -13
- package/lib/config.js +17 -36
- package/lib/handlers/file-proxy.js +2 -1
- package/lib/handlers/http-proxy.js +1 -1
- package/lib/https/ca.js +34 -27
- package/lib/https/h2.js +1 -1
- package/lib/https/index.js +21 -17
- package/lib/index.js +1 -1
- package/lib/init.js +13 -12
- package/lib/inspectors/req.js +13 -10
- package/lib/inspectors/res.js +375 -390
- package/lib/inspectors/rules.js +11 -0
- package/lib/plugins/compat.js +108 -0
- package/lib/plugins/get-plugins-sync.js +1 -4
- package/lib/plugins/index.js +92 -284
- package/lib/plugins/load-plugin.js +205 -223
- package/lib/plugins/module-paths.js +3 -4
- package/lib/plugins/proxy.js +4 -7
- package/lib/rules/index.js +69 -66
- package/lib/rules/protocols.js +6 -0
- package/lib/rules/rules.js +44 -32
- package/lib/rules/util.js +30 -0
- package/lib/service/composer.js +5 -5
- package/lib/service/util.js +7 -21
- package/lib/tunnel.js +15 -12
- package/lib/upgrade.js +9 -10
- package/lib/util/common.js +171 -48
- package/lib/util/file-mgr.js +3 -7
- package/lib/util/index.js +101 -143
- package/package.json +1 -1
- package/README-en_US.md +0 -80
- package/biz/webui/htdocs/img/assistant.svg +0 -1
package/lib/inspectors/rules.js
CHANGED
|
@@ -25,7 +25,12 @@ function resolveRules(req, rules) {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
function setupRules(req, next) {
|
|
28
|
+
var gRules = req.rules;
|
|
28
29
|
resolveRules(req, rules);
|
|
30
|
+
if (gRules) {
|
|
31
|
+
req.rules.P = gRules.P;
|
|
32
|
+
req.rules.G = gRules.G;
|
|
33
|
+
}
|
|
29
34
|
rules.resolveRulesFile(req, function () {
|
|
30
35
|
pluginMgr.resolveWhistlePlugins(req);
|
|
31
36
|
pluginMgr.getRules(req, function (pluginRules) {
|
|
@@ -174,6 +179,12 @@ module.exports = function (req, res, next) {
|
|
|
174
179
|
});
|
|
175
180
|
};
|
|
176
181
|
rules.initHeaderRules(req, true);
|
|
182
|
+
var gList = rules.getGRuleList(req);
|
|
183
|
+
var hList = req.headerRulesMgr && req.headerRulesMgr.getGRuleList(req);
|
|
184
|
+
if (gList || hList) {
|
|
185
|
+
rules.resolvePluginVars(req, (gList || []).concat(hList || []));
|
|
186
|
+
}
|
|
187
|
+
req._resolvedG = true;
|
|
177
188
|
pluginMgr.resolvePipePlugin(req, function () {
|
|
178
189
|
var reqReadPort = req._pipePluginPorts.reqReadPort;
|
|
179
190
|
if (reqReadPort || req._pipePluginPorts.reqWritePort) {
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
|
|
2
|
+
var extend = require('extend');
|
|
3
|
+
|
|
4
|
+
var propsMap = {
|
|
5
|
+
fullUrl: 'FULL_URL_HEADER',
|
|
6
|
+
_extraUrl: 'EXTRA_URL_HEADER',
|
|
7
|
+
reqId: 'REQ_ID_HEADER',
|
|
8
|
+
_existsCustomCert: 'CUSTOM_CERT_HEADER',
|
|
9
|
+
_enableCapture: 'ENABLE_CAPTURE_HEADER',
|
|
10
|
+
_ruleProtocol: 'RULE_PROTO_HEADER',
|
|
11
|
+
_ruleValue: 'RULE_VALUE_HEADER',
|
|
12
|
+
sniRuleValue: 'SNI_VALUE_HEADER',
|
|
13
|
+
_ruleUrl: 'RULE_URL_HEADER',
|
|
14
|
+
_finalUrl: 'REAL_URL_HEADER',
|
|
15
|
+
_relativeUrl: 'RELATIVE_URL_HEADER',
|
|
16
|
+
_pipeValue: 'PIPE_VALUE_HEADER',
|
|
17
|
+
customParser: 'CUSTOM_PARSER_HEADER',
|
|
18
|
+
_statusCode: 'STATUS_CODE_HEADER',
|
|
19
|
+
host: 'HOST_VALUE_HEADER',
|
|
20
|
+
proxy: 'PROXY_VALUE_HEADER',
|
|
21
|
+
pac: 'PAC_VALUE_HEADER',
|
|
22
|
+
method: 'METHOD_HEADER',
|
|
23
|
+
clientIp: 'CLIENT_IP_HEADER',
|
|
24
|
+
clientPort: 'CLIENT_PORT_HEADER',
|
|
25
|
+
_isUIRequest: 'UI_REQUEST_HEADER',
|
|
26
|
+
hostIp: 'HOST_IP_HEADER',
|
|
27
|
+
_pluginVarsValue: 'GLOBAL_VALUE_HEADER',
|
|
28
|
+
serverName: 'SERVER_NAME_HEADER',
|
|
29
|
+
commonName: 'COMMON_NAME_HEADER',
|
|
30
|
+
isPluginReq: 'PLUGIN_REQUEST_HEADER',
|
|
31
|
+
hasCertCache: 'CERT_CACHE_INFO',
|
|
32
|
+
fromComposer: 'REQ_FROM_HEADER'
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
var specValues = {
|
|
36
|
+
fromComposer: 'W2COMPOSER'
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var constsMap = {
|
|
40
|
+
CUSTOM_CERT_HEADER: 'x-whistle-exists-custom-cert',
|
|
41
|
+
ENABLE_CAPTURE_HEADER: 'x-whistle-enable-capture',
|
|
42
|
+
RULE_VALUE_HEADER: 'x-whistle-rule-value',
|
|
43
|
+
RULE_PROTO_HEADER: 'x-whistle-rule-proto',
|
|
44
|
+
SNI_VALUE_HEADER: 'x-whistle-sni-value',
|
|
45
|
+
RULE_URL_HEADER: 'x-whistle-rule-url',
|
|
46
|
+
FULL_URL_HEADER: 'x-whistle-full-url',
|
|
47
|
+
REAL_URL_HEADER: 'x-whistle-real-url',
|
|
48
|
+
EXTRA_URL_HEADER: 'x-whistle-extra-url',
|
|
49
|
+
RELATIVE_URL_HEADER: 'x-whistle-relative-url',
|
|
50
|
+
REQ_ID_HEADER: 'x-whistle-req-id',
|
|
51
|
+
PIPE_VALUE_HEADER: 'x-whistle-pipe-value',
|
|
52
|
+
CUSTOM_PARSER_HEADER: 'x-whistle-frame-parser',
|
|
53
|
+
STATUS_CODE_HEADER: 'x-whistle-status-code',
|
|
54
|
+
PLUGIN_REQUEST_HEADER: 'x-whistle-plugin-request',
|
|
55
|
+
LOCAL_HOST_HEADER: 'x-whistle-local-host',
|
|
56
|
+
HOST_VALUE_HEADER: 'x-whistle-local-host',
|
|
57
|
+
PROXY_VALUE_HEADER: 'x-whistle-proxy-value',
|
|
58
|
+
PAC_VALUE_HEADER: 'x-whistle-pac-value',
|
|
59
|
+
METHOD_HEADER: 'x-whistle-method',
|
|
60
|
+
CLIENT_IP_HEADER: 'x-forwarded-for',
|
|
61
|
+
UI_REQUEST_HEADER: 'x-whistle-auth-ui-request',
|
|
62
|
+
CERT_CACHE_INFO: 'x-whistle-cert-cache-info',
|
|
63
|
+
HOST_IP_HEADER: 'x-whistle-host-ip',
|
|
64
|
+
REQ_FROM_HEADER: 'x-whistle-request-from',
|
|
65
|
+
CLIENT_PORT_HEADER: 'x-whistle-client-port',
|
|
66
|
+
GLOBAL_VALUE_HEADER: 'x-whistle-global-value',
|
|
67
|
+
SERVER_NAME_HEADER: 'x-whistle-server-name',
|
|
68
|
+
COMMON_NAME_HEADER: 'x-whistle-common-name',
|
|
69
|
+
CLIENT_PORT_HEAD: 'x-whistle-client-port',
|
|
70
|
+
GLOBAL_VALUE_HEAD: 'x-whistle-global-value',
|
|
71
|
+
SERVER_NAME_HEAD: 'x-whistle-server-name',
|
|
72
|
+
COMMON_NAME_HEAD: 'x-whistle-common-name'
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
function compat(headers, key, value) {
|
|
76
|
+
Object.defineProperty(headers, key, {
|
|
77
|
+
enumerable: false,
|
|
78
|
+
configurable: true,
|
|
79
|
+
get: function() {
|
|
80
|
+
return value;
|
|
81
|
+
},
|
|
82
|
+
set: function(val) {
|
|
83
|
+
Object.defineProperty(headers, key, {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
writable: true,
|
|
86
|
+
configurable: true,
|
|
87
|
+
value: val
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
exports.compatHeaders = function(req, sessionInfo) {
|
|
95
|
+
var headers = req.headers;
|
|
96
|
+
var rawData = sessionInfo._;
|
|
97
|
+
Object.keys(propsMap).forEach(function(key) {
|
|
98
|
+
var name = constsMap[propsMap[key]];
|
|
99
|
+
var value = rawData[key] || sessionInfo[key];
|
|
100
|
+
value = (value && specValues[key]) || value;
|
|
101
|
+
compat(headers, name, value);
|
|
102
|
+
});
|
|
103
|
+
return sessionInfo;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
exports.compatKeys = function(obj) {
|
|
107
|
+
extend(obj, constsMap);
|
|
108
|
+
};
|
|
@@ -161,10 +161,7 @@ module.exports = function () {
|
|
|
161
161
|
openInPlugins: conf.openInPlugins ? 1 : undefined,
|
|
162
162
|
openInModal: util.getPluginModal(conf),
|
|
163
163
|
openExternal: conf.openExternal ? 1 : undefined,
|
|
164
|
-
priority:
|
|
165
|
-
parseInt(conf.priority, 10) ||
|
|
166
|
-
parseInt(pkg.pluginPriority, 10) ||
|
|
167
|
-
0,
|
|
164
|
+
priority: parseInt(conf.priority, 10) || parseInt(pkg.pluginPriority, 10) || 0,
|
|
168
165
|
rulesUrl: util.getCgiUrl(conf.rulesUrl),
|
|
169
166
|
valuesUrl: util.getCgiUrl(conf.valuesUrl),
|
|
170
167
|
installUrl: util.getCgiUrl(conf.installUrl),
|