davechri 1.0.0
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.
Potentially problematic release.
This version of davechri might be problematic. Click here for more details.
- package/README.md +277 -0
- package/bin/proxyall +5 -0
- package/build/app.js +89 -0
- package/build/app.js.map +1 -0
- package/build/common/Message.js +34 -0
- package/build/common/Message.js.map +1 -0
- package/build/common/ProxyConfig.js +27 -0
- package/build/common/ProxyConfig.js.map +1 -0
- package/build/node-http-mitm-proxy/.gitattributes +2 -0
- package/build/node-http-mitm-proxy/.travis.yml +10 -0
- package/build/node-http-mitm-proxy/README.md +539 -0
- package/build/node-http-mitm-proxy/bin/mitm-proxy.js +36 -0
- package/build/node-http-mitm-proxy/examples/forwardHttps.js +62 -0
- package/build/node-http-mitm-proxy/examples/modifyGoogle.js +44 -0
- package/build/node-http-mitm-proxy/examples/onCertificateMissing.js +30 -0
- package/build/node-http-mitm-proxy/examples/onCertificateRequired.js +23 -0
- package/build/node-http-mitm-proxy/examples/preventRequest.js +20 -0
- package/build/node-http-mitm-proxy/examples/processFullResponseBody.js +36 -0
- package/build/node-http-mitm-proxy/examples/removeProxyToServerContentLength.js +17 -0
- package/build/node-http-mitm-proxy/examples/websocket.js +31 -0
- package/build/node-http-mitm-proxy/examples/wildcard.js +17 -0
- package/build/node-http-mitm-proxy/index.d.ts +233 -0
- package/build/node-http-mitm-proxy/index.js +3 -0
- package/build/node-http-mitm-proxy/lib/ca.js +245 -0
- package/build/node-http-mitm-proxy/lib/middleware/gunzip.js +19 -0
- package/build/node-http-mitm-proxy/lib/middleware/wildcard.js +22 -0
- package/build/node-http-mitm-proxy/lib/proxy.js +1137 -0
- package/build/node-http-mitm-proxy/package-lock.json +1406 -0
- package/build/node-http-mitm-proxy/package.json +45 -0
- package/build/node-http-mitm-proxy/test/01_proxy.js +449 -0
- package/build/node-http-mitm-proxy/test/www/1024.bin +64 -0
- package/build/node-http-mitm-proxy/test/wwwA/1024.bin +64 -0
- package/build/node-http-mitm-proxy/test/wwwA/example.com.html +8 -0
- package/build/node-http-mitm-proxy/test/wwwA/index.html +0 -0
- package/build/node-http-mitm-proxy/test/wwwB/1024.bin +64 -0
- package/build/node-http-mitm-proxy/test/wwwB/index.html +0 -0
- package/build/private/keys/README.md +2 -0
- package/build/private/keys/server.crt +20 -0
- package/build/private/keys/server.key +28 -0
- package/build/private/keys/ssl.conf +25 -0
- package/build/server/src/Global.js +38 -0
- package/build/server/src/Global.js.map +1 -0
- package/build/server/src/Http2Proxy.js +197 -0
- package/build/server/src/Http2Proxy.js.map +1 -0
- package/build/server/src/HttpMessage.js +99 -0
- package/build/server/src/HttpMessage.js.map +1 -0
- package/build/server/src/HttpProxy.js +196 -0
- package/build/server/src/HttpProxy.js.map +1 -0
- package/build/server/src/HttpsProxy.js +110 -0
- package/build/server/src/HttpsProxy.js.map +1 -0
- package/build/server/src/LogProxy.js +115 -0
- package/build/server/src/LogProxy.js.map +1 -0
- package/build/server/src/Paths.js +28 -0
- package/build/server/src/Paths.js.map +1 -0
- package/build/server/src/Ping.js +21 -0
- package/build/server/src/Ping.js.map +1 -0
- package/build/server/src/ProxyAllApp.js +70 -0
- package/build/server/src/ProxyAllApp.js.map +1 -0
- package/build/server/src/Resend.js +89 -0
- package/build/server/src/Resend.js.map +1 -0
- package/build/server/src/SocketIoManager.js +312 -0
- package/build/server/src/SocketIoManager.js.map +1 -0
- package/build/server/src/SocketMessage.js +68 -0
- package/build/server/src/SocketMessage.js.map +1 -0
- package/build/server/src/TcpProxy.js +202 -0
- package/build/server/src/TcpProxy.js.map +1 -0
- package/build/server/src/formatters/HexFormatter.js +33 -0
- package/build/server/src/formatters/HexFormatter.js.map +1 -0
- package/build/server/src/formatters/MongoFormatter.js +97 -0
- package/build/server/src/formatters/MongoFormatter.js.map +1 -0
- package/build/server/src/formatters/MongoOpCode.js +51 -0
- package/build/server/src/formatters/MongoOpCode.js.map +1 -0
- package/build/server/src/formatters/RedisFormatter.js +25 -0
- package/build/server/src/formatters/RedisFormatter.js.map +1 -0
- package/build/server/src/formatters/SqlCommand.js +111 -0
- package/build/server/src/formatters/SqlCommand.js.map +1 -0
- package/build/server/src/formatters/SqlFormatter.js +150 -0
- package/build/server/src/formatters/SqlFormatter.js.map +1 -0
- package/client/README.md +46 -0
- package/client/build/asset-manifest.json +26 -0
- package/client/build/favicon.ico +0 -0
- package/client/build/index.html +1 -0
- package/client/build/manifest.json +8 -0
- package/client/build/robots.txt +3 -0
- package/client/build/static/css/2.bbde182e.chunk.css +12 -0
- package/client/build/static/css/2.bbde182e.chunk.css.map +1 -0
- package/client/build/static/css/main.5bf489b2.chunk.css +2 -0
- package/client/build/static/css/main.5bf489b2.chunk.css.map +1 -0
- package/client/build/static/js/2.ba308ba1.chunk.js +3 -0
- package/client/build/static/js/2.ba308ba1.chunk.js.LICENSE.txt +100 -0
- package/client/build/static/js/2.ba308ba1.chunk.js.map +1 -0
- package/client/build/static/js/3.7073b0d8.chunk.js +2 -0
- package/client/build/static/js/3.7073b0d8.chunk.js.map +1 -0
- package/client/build/static/js/main.494a7501.chunk.js +2 -0
- package/client/build/static/js/main.494a7501.chunk.js.map +1 -0
- package/client/build/static/js/runtime-main.00264969.js +2 -0
- package/client/build/static/js/runtime-main.00264969.js.map +1 -0
- package/client/build/static/media/fa-brands-400.2285773e.woff +0 -0
- package/client/build/static/media/fa-brands-400.23f19bb0.eot +0 -0
- package/client/build/static/media/fa-brands-400.2f517e09.svg +3717 -0
- package/client/build/static/media/fa-brands-400.527940b1.ttf +0 -0
- package/client/build/static/media/fa-brands-400.d878b0a6.woff2 +0 -0
- package/client/build/static/media/fa-regular-400.4689f52c.svg +801 -0
- package/client/build/static/media/fa-regular-400.491974d1.ttf +0 -0
- package/client/build/static/media/fa-regular-400.77206a6b.eot +0 -0
- package/client/build/static/media/fa-regular-400.7a333762.woff2 +0 -0
- package/client/build/static/media/fa-regular-400.bb58e57c.woff +0 -0
- package/client/build/static/media/fa-solid-900.1551f4f6.woff2 +0 -0
- package/client/build/static/media/fa-solid-900.7a8b4f13.svg +5034 -0
- package/client/build/static/media/fa-solid-900.9bbb245e.eot +0 -0
- package/client/build/static/media/fa-solid-900.be9ee23c.ttf +0 -0
- package/client/build/static/media/fa-solid-900.eeccf4f6.woff +0 -0
- package/package.json +80 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDODCCAiCgAwIBAgIUSl8sCdLklhM2lvHjqHp0pHk4ZbMwDQYJKoZIhvcNAQEL
|
|
3
|
+
BQAwFjEUMBIGA1UEAwwLZ29kLWVtcGVyb3IwHhcNMjAxMjE1MjAxMzQwWhcNMjMw
|
|
4
|
+
MzIwMjAxMzQwWjBqMQswCQYDVQQGEwJVUzEQMA4GA1UECAwHVGVzdGluZzENMAsG
|
|
5
|
+
A1UEBwwEVGVzdDEUMBIGA1UECgwLZGV2ZWxvcG1lbnQxJDAiBgNVBAMMGyouc2hh
|
|
6
|
+
cnBzcHJpbmcubG9jYWxob3N0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
|
7
|
+
AQoCggEBAO/BJ/fGe3TGGzLUCKHeEQrrwQb1Zp369+zdNU/qsrPZ2zOwx9vgoPNS
|
|
8
|
+
m7fQa01DeqQkDsjwfxcdn7j5m4ZgiGsjJhiPLf8oJ0NdDPPcTRTmobK10ARdq8Kv
|
|
9
|
+
Ag2qI66WM6F+FZao80Kk0XyUAq1dzYZ42gSdhjXaNKYxZxG/EdE5XDyAETPxo6KD
|
|
10
|
+
eXEe6ZVlVEjIskXshnNEDm4Bf/zdYJ2Fm2eajnN9xOdFmRDnbv0pJXKewzGqMs/b
|
|
11
|
+
P4jT87QtTmh0X+fYqdXXGXzqGABiOERbSYSICnuasCPDpab3DAoJfnQpp8LYg1YB
|
|
12
|
+
93wPdTMCIRlZ8NOv7GL+Qf8Q6r0f7NcCAwEAAaMqMCgwJgYDVR0RBB8wHYIbKi5z
|
|
13
|
+
aGFycHNwcmluZy5sb2NhbGhvc3QuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQCde/me
|
|
14
|
+
RUebMVM1CwVd0tLBWUyfJhhHjHhMwBstRqFaNSCr5UafmH+OQdx2GRHvAUOcYRBW
|
|
15
|
+
9V+zIXcDwkyeGLviclJ00JOZfgIeuWfKRTiCnOBlWJ0zZPrXCsN2tYfjPOc0vX7m
|
|
16
|
+
5fopWekLs4PJZePPJQatZ+4lSTbSUz7ILmqF9zHjcQ3B7NRE08uo9x8j3DhtIhNX
|
|
17
|
+
KjYfa5Th7rmsNUGEEcaIK+rBSNNuPrD5GKQcTiIQnJDmBJxABDp3i5HIebA7Tz+S
|
|
18
|
+
n01KLMxelAWFJcQhK9uqEzhC1gWqhkpvF8sDxNh7nQX2CT9bLdMjm+n+cVV68Ifz
|
|
19
|
+
6hleMUjjrbPcwGpW
|
|
20
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvwSf3xnt0xhsy
|
|
3
|
+
1Aih3hEK68EG9Wad+vfs3TVP6rKz2dszsMfb4KDzUpu30GtNQ3qkJA7I8H8XHZ+4
|
|
4
|
+
+ZuGYIhrIyYYjy3/KCdDXQzz3E0U5qGytdAEXavCrwINqiOuljOhfhWWqPNCpNF8
|
|
5
|
+
lAKtXc2GeNoEnYY12jSmMWcRvxHROVw8gBEz8aOig3lxHumVZVRIyLJF7IZzRA5u
|
|
6
|
+
AX/83WCdhZtnmo5zfcTnRZkQ5279KSVynsMxqjLP2z+I0/O0LU5odF/n2KnV1xl8
|
|
7
|
+
6hgAYjhEW0mEiAp7mrAjw6Wm9wwKCX50KafC2INWAfd8D3UzAiEZWfDTr+xi/kH/
|
|
8
|
+
EOq9H+zXAgMBAAECggEBALPLe2iRnSWOJvlwDuUsfkVdVM0eHQ1eFqy3mvJKhCbh
|
|
9
|
+
ukPCT66xfqHaklI/Zyhy8TbEn53K1NQF8DCsZxhXrhYCLuB+BzVw7DjVQBBkZh3F
|
|
10
|
+
cv9s3wlXIaaGzZhnvgiANUnnHtNz8bFJnpu492UBkk5EtOJ/KxWZhKAZLj0dt4PY
|
|
11
|
+
944z0jrAdbdkXULwPpO9FOqkXvqErbYQsc2Ow5QRYltqPi4UJuPYEiF6WmyCsOTx
|
|
12
|
+
gWygWmD2/65kpU8HBGgVk3u+x0YvEA+evqRawaUU/BWB70hrSHxRwz76F0EhxoR4
|
|
13
|
+
8k7FeezcTCUesXU95WOT/ciMbFH2Y1R3bvKwVGgDZlECgYEA/Mos3y5gKqIt01tV
|
|
14
|
+
/E3gSgKwmrASfkLP5WJha8gt5Q1sXYpYppokfPY1DIyP9RTlcOa7NDdi88mN6hk0
|
|
15
|
+
xS1nZ05kNJvHNLlnBEF4UUGwcnTHyeIyeJIpQh1qwrNNMT2nxUr9pVFpMJ/ay1Xp
|
|
16
|
+
e40MD2YPHsii+aTOLL3BxM/BIl8CgYEA8syaYKIEoLWQ7WySgyzHdyFMFXHxjdRG
|
|
17
|
+
jV3mzIhgYO+sQ5D6JLBFmMvFmVzboM8ZLvLmibcM/frAmNXQEziX49A3OvSGuoFV
|
|
18
|
+
otxVb1dM6EvRYDELMsTUJSzMGvooppFbkUstLuDPQoks4jGkeBn0lS3/EumPIb5F
|
|
19
|
+
u+7R9opYeIkCgYAMmAHuSIAv/45q5jT9cd/HsCSeQEFbmvaChgk2dm2a6LVKX7cU
|
|
20
|
+
7b79nsJ70pDlc9oOauBOtKewX407aXAQlrd9FRG28T/WZ5ozQxO8cJpayWierS84
|
|
21
|
+
hIebrJ2B/67L0jeGg7rpPooQCxa6ZJhSOG+uYLZGIVbFOymuXvHFXVhQ3wKBgQDM
|
|
22
|
+
5F6Ol4sCN9ZylYHaUoqM/LthCYPHpVBYcdqX1apHg1pCtnBxT5ObyrIYpqTswnfF
|
|
23
|
+
B9QGeUPsfJPVJfHuln6PECHbjYi4kPY8dmVejTRof7rTyu9hS3qfWHtxdJOjZNz5
|
|
24
|
+
8o/RlIMy6eHHjA74Dyc4UNWFFzXjStc8LeBfhgX8yQKBgDuB9pAlzA4eZ4tCECdz
|
|
25
|
+
d0tiVpEhkTYS/kQPQ8oS8+EmTOd2NoOjus9OZ4ZQeS/r6C3BW4lHb8KfEUlsq6pf
|
|
26
|
+
k5d47wETtTIK88kBtbwp6a0kWMDhdy+m1xpIsOfeEzmrHLC/RIDhOPRhAPQCvFxD
|
|
27
|
+
CRoOK4xCwC9cCgAAq1ZZQZGF
|
|
28
|
+
-----END PRIVATE KEY-----
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
[ req ]
|
|
2
|
+
default_bits = 4096
|
|
3
|
+
distinguished_name = req_distinguished_name
|
|
4
|
+
req_extensions = req_ext
|
|
5
|
+
|
|
6
|
+
[ req_distinguished_name ]
|
|
7
|
+
countryName = US
|
|
8
|
+
countryName_default = US
|
|
9
|
+
stateOrProvinceName = MN
|
|
10
|
+
stateOrProvinceName_default = Minnesota
|
|
11
|
+
localityName = Fergus Falls
|
|
12
|
+
localityName_default = Fergus Falls
|
|
13
|
+
organizationName = SharpSpring
|
|
14
|
+
organizationName_default = SharpSpring
|
|
15
|
+
commonName = localhost
|
|
16
|
+
commonName_max = 64
|
|
17
|
+
commonName_default = localhost
|
|
18
|
+
|
|
19
|
+
[ req_ext ]
|
|
20
|
+
subjectAltName = @alt_names
|
|
21
|
+
|
|
22
|
+
[alt_names]
|
|
23
|
+
DNS.1 = localhost
|
|
24
|
+
DNS.2 = middleman
|
|
25
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const dns_1 = __importDefault(require("dns"));
|
|
7
|
+
class Global {
|
|
8
|
+
static resolveIp(ipAddr) {
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
if (ipAddr) {
|
|
11
|
+
try {
|
|
12
|
+
ipAddr = ipAddr.replace('::ffff:', '');
|
|
13
|
+
dns_1.default.reverse(ipAddr, (err, hosts) => {
|
|
14
|
+
if (err === null && hosts.length > 0) {
|
|
15
|
+
ipAddr = hosts.sort((a, b) => a.length - b.length)[0];
|
|
16
|
+
const host = ipAddr.split('.')[0]; // un-qualify host name
|
|
17
|
+
if (isNaN(+host)) {
|
|
18
|
+
ipAddr = host;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
resolve(ipAddr);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
resolve(ipAddr);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
ipAddr = 'unknown';
|
|
30
|
+
resolve(ipAddr);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.default = Global;
|
|
36
|
+
Global.nextSequenceNumber = 0;
|
|
37
|
+
Global.debug = false;
|
|
38
|
+
//# sourceMappingURL=Global.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Global.js","sourceRoot":"","sources":["../../../server/src/Global.ts"],"names":[],"mappings":";;;;;AACA,8CAAqB;AAErB,MAAqB,MAAM;IAKvB,MAAM,CAAC,SAAS,CAAE,MAA0B;QAC1C,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrC,IAAI,MAAM,EAAE;gBACV,IAAI;oBACF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;oBACtC,aAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAQ,EAAE,KAAU,EAAE,EAAE;wBAC3C,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;4BACpC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAQ,EAAE,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;4BACnE,MAAM,IAAI,GAAG,MAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,uBAAuB;4BAC1D,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE;gCAChB,MAAM,GAAG,IAAI,CAAA;6BACd;yBACF;wBACD,OAAO,CAAC,MAAO,CAAC,CAAA;oBAClB,CAAC,CAAC,CAAA;iBACH;gBAAC,OAAO,CAAC,EAAE;oBACV,OAAO,CAAC,MAAM,CAAC,CAAA;iBAChB;aACF;iBAAM;gBACL,MAAM,GAAG,SAAS,CAAA;gBAClB,OAAO,CAAC,MAAM,CAAC,CAAA;aAChB;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;;AA5BL,yBA6BC;AA3BU,yBAAkB,GAAW,CAAC,CAAC;AAC/B,YAAK,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const url_1 = __importDefault(require("url"));
|
|
16
|
+
const http2_1 = __importDefault(require("http2"));
|
|
17
|
+
const Global_1 = __importDefault(require("./Global"));
|
|
18
|
+
const ProxyConfig_1 = __importDefault(require("../../common/ProxyConfig"));
|
|
19
|
+
const HttpMessage_1 = __importDefault(require("./HttpMessage"));
|
|
20
|
+
const querystring_1 = __importDefault(require("querystring"));
|
|
21
|
+
const HexFormatter_1 = __importDefault(require("./formatters/HexFormatter"));
|
|
22
|
+
const Paths_1 = __importDefault(require("./Paths"));
|
|
23
|
+
const fs_1 = __importDefault(require("fs"));
|
|
24
|
+
const debug = false;
|
|
25
|
+
const settings = { maxConcurrentStreams: undefined };
|
|
26
|
+
const tlsOptions = {
|
|
27
|
+
key: fs_1.default.readFileSync(Paths_1.default.serverKey()),
|
|
28
|
+
cert: fs_1.default.readFileSync(Paths_1.default.serverCrt())
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Important: This module must remain at the project root to properly set the document root for the index.html.
|
|
32
|
+
*/
|
|
33
|
+
class Http2Proxy {
|
|
34
|
+
static forwardProxy(port, isSecure = false) {
|
|
35
|
+
const proxyConfig = new ProxyConfig_1.default();
|
|
36
|
+
proxyConfig.isSecure = isSecure;
|
|
37
|
+
proxyConfig.protocol = 'browser:';
|
|
38
|
+
proxyConfig.path = port.toString();
|
|
39
|
+
Http2Proxy.start(proxyConfig);
|
|
40
|
+
}
|
|
41
|
+
static reverseProxy(proxyConfig) {
|
|
42
|
+
Http2Proxy.start(proxyConfig);
|
|
43
|
+
}
|
|
44
|
+
static start(proxyConfig) {
|
|
45
|
+
const server = proxyConfig.isSecure
|
|
46
|
+
? http2_1.default.createSecureServer(Object.assign({ settings }, tlsOptions))
|
|
47
|
+
: http2_1.default.createServer({
|
|
48
|
+
settings
|
|
49
|
+
}); // HTTPS is not currently supported
|
|
50
|
+
proxyConfig._server = server;
|
|
51
|
+
listen(server);
|
|
52
|
+
let retries = 0;
|
|
53
|
+
let wait = 1000;
|
|
54
|
+
server.on('error', (err) => {
|
|
55
|
+
if (++retries < 10) {
|
|
56
|
+
setTimeout(() => listen(server), wait *= 2);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.error('Http2Proxy server error', err);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
server.on('request', onRequest);
|
|
63
|
+
function listen(server) {
|
|
64
|
+
server.listen(proxyConfig.path, () => {
|
|
65
|
+
const msg = proxyConfig.protocol === 'browser:' ? '' : `, target host ${proxyConfig.hostname}`;
|
|
66
|
+
console.log(`Listening on http2 port ${proxyConfig.path} ${msg}`);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function onRequest(clientReq, clientRes) {
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
// eslint-disable-next-line node/no-deprecated-api
|
|
72
|
+
const reqUrl = url_1.default.parse(clientReq.url ? clientReq.url : '');
|
|
73
|
+
const sequenceNumber = ++Global_1.default.nextSequenceNumber;
|
|
74
|
+
const remoteAddress = clientReq.socket.remoteAddress;
|
|
75
|
+
const httpMessage = new HttpMessage_1.default(proxyConfig, sequenceNumber, remoteAddress, clientReq.method, clientReq.url, clientReq.headers);
|
|
76
|
+
const requestBodyPromise = getReqBody(clientReq);
|
|
77
|
+
httpMessage.emitMessageToBrowser(''); // No request body received yet
|
|
78
|
+
proxyRequest(proxyConfig, requestBodyPromise);
|
|
79
|
+
function proxyRequest(proxyConfig, requestBodyPromise) {
|
|
80
|
+
clientReq.on('error', function (error) {
|
|
81
|
+
console.error(sequenceNumber, 'Client connection error', JSON.stringify(error, null, 2));
|
|
82
|
+
});
|
|
83
|
+
const headers = clientReq.headers;
|
|
84
|
+
let authority = proxyConfig.hostname;
|
|
85
|
+
if (proxyConfig.port)
|
|
86
|
+
authority += ':' + proxyConfig.port;
|
|
87
|
+
headers[http2_1.default.constants.HTTP2_HEADER_AUTHORITY] = authority;
|
|
88
|
+
let { protocol, hostname, port } = proxyConfig.protocol === 'browser:'
|
|
89
|
+
? reqUrl
|
|
90
|
+
: proxyConfig;
|
|
91
|
+
if (proxyConfig.protocol !== 'browser:') {
|
|
92
|
+
protocol = proxyConfig.isSecure ? 'https:' : 'http:';
|
|
93
|
+
}
|
|
94
|
+
if (port === undefined) {
|
|
95
|
+
port = protocol === 'https:' ? 443 : 80;
|
|
96
|
+
}
|
|
97
|
+
const proxyClient = http2_1.default.connect(`${protocol}//${hostname}:${port}`, { settings });
|
|
98
|
+
proxyClient.on('error', (err) => __awaiter(this, void 0, void 0, function* () {
|
|
99
|
+
const requestBody = yield requestBodyPromise;
|
|
100
|
+
httpMessage.emitMessageToBrowser(requestBody, 404, {}, { err, 'proxyall-config': proxyConfig });
|
|
101
|
+
}));
|
|
102
|
+
const chunks = [];
|
|
103
|
+
let trailers = {};
|
|
104
|
+
const proxyStream = proxyClient.request(headers);
|
|
105
|
+
proxyStream.on('trailers', (headers, _flags) => {
|
|
106
|
+
if (debug)
|
|
107
|
+
console.log('trailers', headers);
|
|
108
|
+
clientRes.addTrailers(headers);
|
|
109
|
+
trailers = headers;
|
|
110
|
+
});
|
|
111
|
+
proxyStream.on('response', (headers, flags) => {
|
|
112
|
+
if (debug)
|
|
113
|
+
console.log('on response', clientReq.url, headers, flags);
|
|
114
|
+
clientRes.stream.respond(headers, { waitForTrailers: true });
|
|
115
|
+
// proxyStream.pipe(clientRes, {
|
|
116
|
+
// end: true
|
|
117
|
+
// })
|
|
118
|
+
proxyStream.on('data', function (chunk) {
|
|
119
|
+
clientRes.write(chunk);
|
|
120
|
+
chunks.push(chunk);
|
|
121
|
+
});
|
|
122
|
+
proxyStream.on('end', () => __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
if (debug)
|
|
124
|
+
console.log('end of response received');
|
|
125
|
+
clientRes.end();
|
|
126
|
+
proxyClient.close();
|
|
127
|
+
const requestBody = yield requestBodyPromise;
|
|
128
|
+
// chunks.push(headers)
|
|
129
|
+
const resBody = getResBody(chunks);
|
|
130
|
+
const allHeaders = Object.assign(Object.assign({}, headers), trailers);
|
|
131
|
+
httpMessage.emitMessageToBrowser(requestBody, headers[':status'], allHeaders, resBody);
|
|
132
|
+
}));
|
|
133
|
+
});
|
|
134
|
+
// Forward the client request
|
|
135
|
+
clientReq.pipe(proxyStream, {
|
|
136
|
+
end: true
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
function getReqBody(clientReq) {
|
|
140
|
+
return new Promise(resolve => {
|
|
141
|
+
// eslint-disable-next-line no-unreachable
|
|
142
|
+
let requestBody = '';
|
|
143
|
+
let rawData = '';
|
|
144
|
+
clientReq.on('data', function (chunk) {
|
|
145
|
+
rawData += chunk;
|
|
146
|
+
});
|
|
147
|
+
// eslint-disable-next-line no-unreachable
|
|
148
|
+
clientReq.on('end', function () {
|
|
149
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
150
|
+
try {
|
|
151
|
+
requestBody = JSON.parse(rawData);
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
const contentType = clientReq.headers['content-type'];
|
|
155
|
+
if (contentType && contentType.indexOf('application/x-www-form-urlencoded') !== -1) {
|
|
156
|
+
requestBody = querystring_1.default.parse(rawData);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
requestBody = rawData;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (proxyConfig.protocol === 'grpc:') {
|
|
163
|
+
requestBody = HexFormatter_1.default.format(Buffer.from(requestBody, 'utf-8'));
|
|
164
|
+
}
|
|
165
|
+
resolve(requestBody);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function getResBody(chunks) {
|
|
171
|
+
if (chunks.length === 0)
|
|
172
|
+
return '';
|
|
173
|
+
const resBuffer = chunks.reduce((prevChunk, chunk) => Buffer.concat([prevChunk, chunk], prevChunk.length + chunk.length));
|
|
174
|
+
const resString = resBuffer.toString();
|
|
175
|
+
let resBody = '';
|
|
176
|
+
try {
|
|
177
|
+
resBody = JSON.parse(resString); // assume JSON
|
|
178
|
+
}
|
|
179
|
+
catch (e) {
|
|
180
|
+
resBody = resString;
|
|
181
|
+
}
|
|
182
|
+
// gRPC is binary data
|
|
183
|
+
if (proxyConfig.protocol === 'grpc:') {
|
|
184
|
+
resBody = HexFormatter_1.default.format(Buffer.from(resBody, 'utf-8'));
|
|
185
|
+
}
|
|
186
|
+
return resBody;
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
static destructor(proxyConfig) {
|
|
192
|
+
if (proxyConfig._server)
|
|
193
|
+
proxyConfig._server.close();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.default = Http2Proxy;
|
|
197
|
+
//# sourceMappingURL=Http2Proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Http2Proxy.js","sourceRoot":"","sources":["../../../server/src/Http2Proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const Message_1 = require("../../common/Message");
|
|
16
|
+
const SocketMessage_1 = __importDefault(require("./SocketMessage"));
|
|
17
|
+
const Global_1 = __importDefault(require("./Global"));
|
|
18
|
+
class HttpMessage {
|
|
19
|
+
constructor(proxyConfig, sequenceNumber, remoteAddress, method, url, reqHeaders) {
|
|
20
|
+
this.emitCount = 0;
|
|
21
|
+
this.sequenceNumber = 0;
|
|
22
|
+
this.getHttpEndpoint = (method, url, requestBody) => {
|
|
23
|
+
let endpoint = url.split('?')[0];
|
|
24
|
+
const tokens = endpoint === null || endpoint === void 0 ? void 0 : endpoint.split('/');
|
|
25
|
+
endpoint = tokens ? tokens[tokens.length - 1] : '';
|
|
26
|
+
if (!isNaN(+endpoint) && tokens && tokens.length > 1) {
|
|
27
|
+
endpoint = tokens[tokens.length - 2] + '/' + tokens[tokens.length - 1];
|
|
28
|
+
}
|
|
29
|
+
if (method !== 'OPTIONS' &&
|
|
30
|
+
(url.endsWith('/graphql') || url.endsWith('/graphql-public'))) {
|
|
31
|
+
endpoint = '';
|
|
32
|
+
if (typeof requestBody === 'object') {
|
|
33
|
+
if (Array.isArray(requestBody)) {
|
|
34
|
+
requestBody.forEach((entry) => {
|
|
35
|
+
if (entry.operationName) {
|
|
36
|
+
if (endpoint.length > 0)
|
|
37
|
+
endpoint += ',';
|
|
38
|
+
endpoint += ' ' + entry.operationName;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
for (const key in requestBody) {
|
|
44
|
+
if (key === 'operationName') {
|
|
45
|
+
if (endpoint.length > 0)
|
|
46
|
+
endpoint += ',';
|
|
47
|
+
endpoint += ' ' + requestBody[key];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const tag = url.endsWith('/graphql-public') ? 'GQLP' : 'GQL';
|
|
53
|
+
endpoint = ' ' + tag + endpoint;
|
|
54
|
+
}
|
|
55
|
+
if ('/' + endpoint === url)
|
|
56
|
+
endpoint = '';
|
|
57
|
+
return endpoint;
|
|
58
|
+
};
|
|
59
|
+
this.startTime = Date.now();
|
|
60
|
+
this.proxyConfig = proxyConfig;
|
|
61
|
+
this.sequenceNumber = sequenceNumber;
|
|
62
|
+
this.remoteAddress = remoteAddress;
|
|
63
|
+
this.method = method;
|
|
64
|
+
this.url = url;
|
|
65
|
+
this.reqHeaders = reqHeaders;
|
|
66
|
+
}
|
|
67
|
+
emitMessageToBrowser(reqBody = '', resStatus = 0, resHeaders = {}, resBody = Message_1.NO_RESPONSE) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
const reqBodyJson = typeof reqBody === 'object' ? reqBody : this.toJSON(reqBody);
|
|
70
|
+
const resBodyJson = resBody === Message_1.NO_RESPONSE || typeof resBody === 'object' ? resBody : this.toJSON(resBody);
|
|
71
|
+
const host = this.proxyConfig ? this.getHostPort(this.proxyConfig) : 'Unknown';
|
|
72
|
+
const message = yield SocketMessage_1.default.buildRequest(Date.now(), this.sequenceNumber, this.reqHeaders, this.method, this.url, this.getHttpEndpoint(this.method, this.url, reqBodyJson), reqBodyJson, this.remoteAddress, host, // server host
|
|
73
|
+
this.proxyConfig ? this.proxyConfig.path : '', Date.now() - this.startTime);
|
|
74
|
+
SocketMessage_1.default.appendResponse(message, resHeaders, resBodyJson, resStatus, Date.now() - this.startTime);
|
|
75
|
+
Global_1.default.socketIoManager.emitMessageToBrowser(resBody === Message_1.NO_RESPONSE
|
|
76
|
+
? Message_1.MessageType.REQUEST
|
|
77
|
+
: this.emitCount === 0
|
|
78
|
+
? Message_1.MessageType.REQUEST_AND_RESPONSE
|
|
79
|
+
: Message_1.MessageType.RESPONSE, message, this.proxyConfig);
|
|
80
|
+
++this.emitCount;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
toJSON(s) {
|
|
84
|
+
try {
|
|
85
|
+
return JSON.parse(s);
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
return s;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
getHostPort(proxyConfig) {
|
|
92
|
+
let host = proxyConfig.hostname;
|
|
93
|
+
if (proxyConfig.port)
|
|
94
|
+
host += ':' + proxyConfig.port;
|
|
95
|
+
return host;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.default = HttpMessage;
|
|
99
|
+
//# sourceMappingURL=HttpMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpMessage.js","sourceRoot":"","sources":["../../../server/src/HttpMessage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const url_1 = __importDefault(require("url"));
|
|
16
|
+
const http_1 = __importDefault(require("http"));
|
|
17
|
+
const https_1 = __importDefault(require("https"));
|
|
18
|
+
const Global_1 = __importDefault(require("./Global"));
|
|
19
|
+
const ProxyConfig_1 = __importDefault(require("../../common/ProxyConfig"));
|
|
20
|
+
const HttpMessage_1 = __importDefault(require("./HttpMessage"));
|
|
21
|
+
const querystring_1 = __importDefault(require("querystring"));
|
|
22
|
+
const ProxyAllApp_1 = __importDefault(require("./ProxyAllApp"));
|
|
23
|
+
const decompressResponse = require('decompress-response');
|
|
24
|
+
/**
|
|
25
|
+
* Important: This module must remain at the project root to properly set the document root for the index.html.
|
|
26
|
+
*/
|
|
27
|
+
class HttpProxy {
|
|
28
|
+
onRequest(clientReq, clientRes) {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
// eslint-disable-next-line node/no-deprecated-api
|
|
31
|
+
const reqUrl = url_1.default.parse(clientReq.url ? clientReq.url : '');
|
|
32
|
+
// Request is from ProxyAll app?
|
|
33
|
+
if (ProxyAllApp_1.default(clientRes, reqUrl)) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const sequenceNumber = ++Global_1.default.nextSequenceNumber;
|
|
37
|
+
const remoteAddress = clientReq.socket.remoteAddress;
|
|
38
|
+
// Find matching proxy configuration
|
|
39
|
+
const clientHostName = yield Global_1.default.resolveIp(clientReq.socket.remoteAddress);
|
|
40
|
+
let proxyConfig = Global_1.default.socketIoManager.findProxyConfigMatchingURL('http:', clientHostName, reqUrl);
|
|
41
|
+
// Always proxy forward proxy requests
|
|
42
|
+
if (proxyConfig === undefined && reqUrl.protocol !== null) {
|
|
43
|
+
proxyConfig = new ProxyConfig_1.default();
|
|
44
|
+
proxyConfig.path = reqUrl.pathname;
|
|
45
|
+
proxyConfig.protocol = reqUrl.protocol;
|
|
46
|
+
proxyConfig.hostname = reqUrl.hostname;
|
|
47
|
+
proxyConfig.port = reqUrl.port === null
|
|
48
|
+
? reqUrl.protocol === 'http:' ? 80 : 443
|
|
49
|
+
: +reqUrl.port;
|
|
50
|
+
}
|
|
51
|
+
const httpMessage = new HttpMessage_1.default(proxyConfig, sequenceNumber, remoteAddress, clientReq.method, clientReq.url, clientReq.headers);
|
|
52
|
+
const requestBodyPromise = getReqBody(clientReq);
|
|
53
|
+
if (proxyConfig === undefined) {
|
|
54
|
+
const requestBody = yield requestBodyPromise;
|
|
55
|
+
const error = 'No matching proxy configuration found for ' + reqUrl.pathname;
|
|
56
|
+
if (reqUrl.pathname === '/') {
|
|
57
|
+
clientRes.writeHead(302, { Location: reqUrl.href + 'proxyall' });
|
|
58
|
+
clientRes.end();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
httpMessage.emitMessageToBrowser(requestBody, 404, {}, { error });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
httpMessage.emitMessageToBrowser(''); // No request body received yet
|
|
66
|
+
proxyRequest(proxyConfig, requestBodyPromise);
|
|
67
|
+
}
|
|
68
|
+
function proxyRequest(proxyConfig, requestBodyPromise) {
|
|
69
|
+
clientReq.on('close', function () {
|
|
70
|
+
// sendErrorResponse(499, "Client closed connection", undefined, proxyConfig.path);
|
|
71
|
+
});
|
|
72
|
+
clientReq.on('error', function (error) {
|
|
73
|
+
console.error(sequenceNumber, 'Client connection error', JSON.stringify(error, null, 2));
|
|
74
|
+
});
|
|
75
|
+
let method = clientReq.method;
|
|
76
|
+
// GET request received with body?
|
|
77
|
+
if (clientReq.method === 'GET' &&
|
|
78
|
+
clientReq.headers['content-length'] && +clientReq.headers['content-length'] > 0) {
|
|
79
|
+
method = 'POST'; // forward request as POST
|
|
80
|
+
}
|
|
81
|
+
const headers = clientReq.headers;
|
|
82
|
+
headers.host = proxyConfig.hostname;
|
|
83
|
+
if (proxyConfig.port)
|
|
84
|
+
headers.host += ':' + proxyConfig.port;
|
|
85
|
+
let { protocol, hostname, port } = proxyConfig.protocol === 'browser:' || proxyConfig.protocol === 'log:'
|
|
86
|
+
? reqUrl
|
|
87
|
+
: proxyConfig;
|
|
88
|
+
if (port === undefined) {
|
|
89
|
+
port = proxyConfig.protocol === 'https:' ? 443 : 80;
|
|
90
|
+
}
|
|
91
|
+
const options = {
|
|
92
|
+
protocol,
|
|
93
|
+
hostname,
|
|
94
|
+
port,
|
|
95
|
+
path: clientReq.url,
|
|
96
|
+
method,
|
|
97
|
+
headers
|
|
98
|
+
};
|
|
99
|
+
let proxy;
|
|
100
|
+
if (options.protocol === 'https:') {
|
|
101
|
+
// options.cert: fs.readFileSync('/home/davidchr/imlTrust.pem');
|
|
102
|
+
// options.headers.Authorization = 'Basic ' + new Buffer.from('elastic:imliml').toString('base64'); // hardcoded authentication
|
|
103
|
+
proxy = https_1.default.request(options, handleResponse);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
proxy = http_1.default.request(options, handleResponse);
|
|
107
|
+
}
|
|
108
|
+
function handleResponse(proxyRes) {
|
|
109
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
const requestBody = yield requestBodyPromise;
|
|
111
|
+
if (typeof requestBody === 'object' ||
|
|
112
|
+
(typeof requestBody === 'string' && requestBody.length > 0)) {
|
|
113
|
+
httpMessage.emitMessageToBrowser(requestBody);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Forward the response back to the client
|
|
117
|
+
*/
|
|
118
|
+
clientRes.writeHead(proxyRes.statusCode, proxyRes.headers);
|
|
119
|
+
proxyRes.pipe(clientRes, {
|
|
120
|
+
end: true
|
|
121
|
+
});
|
|
122
|
+
const resBody = yield getResBody(proxyRes);
|
|
123
|
+
httpMessage.emitMessageToBrowser(requestBody, proxyRes.statusCode, proxyRes.headers, resBody);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
proxy.on('error', function (error) {
|
|
127
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
console.error(sequenceNumber, 'Proxy connect error', JSON.stringify(error, null, 2), 'config:', proxyConfig);
|
|
129
|
+
const requestBody = yield requestBodyPromise;
|
|
130
|
+
httpMessage.emitMessageToBrowser(requestBody, 404, {}, { error, 'proxyall-config': proxyConfig });
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
clientReq.pipe(proxy, {
|
|
134
|
+
end: true
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
function getReqBody(clientReq) {
|
|
138
|
+
return new Promise(resolve => {
|
|
139
|
+
let requestBody = '';
|
|
140
|
+
clientReq.setEncoding('utf8');
|
|
141
|
+
let rawData = '';
|
|
142
|
+
clientReq.on('data', function (chunk) {
|
|
143
|
+
rawData += chunk;
|
|
144
|
+
});
|
|
145
|
+
clientReq.on('end', function () {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
try {
|
|
148
|
+
requestBody = JSON.parse(rawData);
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
const contentType = clientReq.headers['content-type'];
|
|
152
|
+
if (contentType && contentType.indexOf('application/x-www-form-urlencoded') !== -1) {
|
|
153
|
+
requestBody = querystring_1.default.parse(rawData);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
requestBody = rawData;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
resolve(requestBody);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
function getResBody(proxyRes) {
|
|
165
|
+
return new Promise(resolve => {
|
|
166
|
+
if (proxyRes.headers) {
|
|
167
|
+
if (proxyRes.headers['content-encoding']) {
|
|
168
|
+
proxyRes = decompressResponse(proxyRes);
|
|
169
|
+
// delete proxyRes.headers['content-encoding'];
|
|
170
|
+
}
|
|
171
|
+
if (proxyRes.headers['content-type'] &&
|
|
172
|
+
proxyRes.headers['content-type'].indexOf('utf-8') !== -1) {
|
|
173
|
+
proxyRes.setEncoding('utf8');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
let rawData = '';
|
|
177
|
+
proxyRes.on('data', function (chunk) {
|
|
178
|
+
rawData += chunk;
|
|
179
|
+
});
|
|
180
|
+
let parsedData = '';
|
|
181
|
+
proxyRes.on('end', () => {
|
|
182
|
+
try {
|
|
183
|
+
parsedData = JSON.parse(rawData); // assume JSON
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
parsedData = rawData;
|
|
187
|
+
}
|
|
188
|
+
resolve(parsedData);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
exports.default = HttpProxy;
|
|
196
|
+
//# sourceMappingURL=HttpProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpProxy.js","sourceRoot":"","sources":["../../../server/src/HttpProxy.ts"],"names":[],"mappings":"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"}
|