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.
Files changed (41) hide show
  1. package/assets/js/log.js +8 -4
  2. package/bin/util.js +1 -1
  3. package/biz/index.js +12 -10
  4. package/biz/webui/cgi-bin/certs/active.js +6 -0
  5. package/biz/webui/cgi-bin/certs/remove.js +0 -1
  6. package/biz/webui/cgi-bin/certs/upload.js +0 -1
  7. package/biz/webui/cgi-bin/util.js +7 -20
  8. package/biz/webui/htdocs/index.html +1 -1
  9. package/biz/webui/htdocs/js/index.js +43 -43
  10. package/biz/webui/lib/index.js +10 -13
  11. package/lib/config.js +17 -36
  12. package/lib/handlers/file-proxy.js +2 -1
  13. package/lib/handlers/http-proxy.js +1 -1
  14. package/lib/https/ca.js +34 -27
  15. package/lib/https/h2.js +1 -1
  16. package/lib/https/index.js +21 -17
  17. package/lib/index.js +1 -1
  18. package/lib/init.js +13 -12
  19. package/lib/inspectors/req.js +13 -10
  20. package/lib/inspectors/res.js +375 -390
  21. package/lib/inspectors/rules.js +11 -0
  22. package/lib/plugins/compat.js +108 -0
  23. package/lib/plugins/get-plugins-sync.js +1 -4
  24. package/lib/plugins/index.js +92 -284
  25. package/lib/plugins/load-plugin.js +205 -223
  26. package/lib/plugins/module-paths.js +3 -4
  27. package/lib/plugins/proxy.js +4 -7
  28. package/lib/rules/index.js +69 -66
  29. package/lib/rules/protocols.js +6 -0
  30. package/lib/rules/rules.js +44 -32
  31. package/lib/rules/util.js +30 -0
  32. package/lib/service/composer.js +5 -5
  33. package/lib/service/util.js +7 -21
  34. package/lib/tunnel.js +15 -12
  35. package/lib/upgrade.js +9 -10
  36. package/lib/util/common.js +171 -48
  37. package/lib/util/file-mgr.js +3 -7
  38. package/lib/util/index.js +101 -143
  39. package/package.json +1 -1
  40. package/README-en_US.md +0 -80
  41. package/biz/webui/htdocs/img/assistant.svg +0 -1
@@ -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),