@requestly/requestly-proxy 1.1.23 → 1.2.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.
- package/dist/components/proxy-middleware/helpers/harObectCreator.js +2 -2
- package/dist/components/proxy-middleware/helpers/http_helpers.js +2 -7
- package/dist/components/proxy-middleware/rule_action_processor/processors/modify_response_processor.js +1 -0
- package/dist/lib/proxy/lib/ca.d.ts +1 -0
- package/dist/lib/proxy/lib/ca.js +34 -3
- package/dist/lib/proxy/lib/proxy.d.ts +1 -1
- package/dist/lib/proxy/lib/proxy.js +11 -3
- package/dist/rq-proxy.js +3 -0
- package/dist/types/index.d.ts +2 -0
- package/package.json +1 -1
|
@@ -22,14 +22,14 @@ const createHarQueryStrings = (query_params) => {
|
|
|
22
22
|
query_value.forEach(val => {
|
|
23
23
|
res.push({
|
|
24
24
|
"name": query,
|
|
25
|
-
"value": val
|
|
25
|
+
"value": val !== null && val !== void 0 ? val : ""
|
|
26
26
|
});
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
else {
|
|
30
30
|
res.push({
|
|
31
31
|
"name": query,
|
|
32
|
-
"value": query_value
|
|
32
|
+
"value": query_value !== null && query_value !== void 0 ? query_value : ""
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
});
|
|
@@ -49,13 +49,8 @@ const bodyParser = (contentTypeHeader, buffer) => {
|
|
|
49
49
|
};
|
|
50
50
|
exports.bodyParser = bodyParser;
|
|
51
51
|
const getContentType = (contentTypeHeader) => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
let contentType = null;
|
|
56
|
-
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type
|
|
57
|
-
contentType = contentTypeHeader.split(";")[0];
|
|
58
|
-
return contentType;
|
|
52
|
+
var _a;
|
|
53
|
+
return (_a = contentTypeHeader === null || contentTypeHeader === void 0 ? void 0 : contentTypeHeader.split(";")[0]) !== null && _a !== void 0 ? _a : null;
|
|
59
54
|
};
|
|
60
55
|
exports.getContentType = getContentType;
|
|
61
56
|
const parseJsonBody = (data) => {
|
|
@@ -117,6 +117,7 @@ const modify_response_using_code = (action, ctx) => __awaiter(void 0, void 0, vo
|
|
|
117
117
|
responseType: (_c = (_b = ctx === null || ctx === void 0 ? void 0 : ctx.serverToProxyResponse) === null || _b === void 0 ? void 0 : _b.headers) === null || _c === void 0 ? void 0 : _c["content-type"],
|
|
118
118
|
requestHeaders: ctx.clientToProxyRequest.headers,
|
|
119
119
|
requestData: (0, http_helpers_1.parseJsonBody)((_e = (_d = ctx.rq) === null || _d === void 0 ? void 0 : _d.final_request) === null || _e === void 0 ? void 0 : _e.body) || null,
|
|
120
|
+
statusCode: ctx.serverToProxyResponse.statusCode,
|
|
120
121
|
};
|
|
121
122
|
try {
|
|
122
123
|
args.responseJSON = JSON.parse(args.response);
|
package/dist/lib/proxy/lib/ca.js
CHANGED
|
@@ -127,7 +127,12 @@ var ServerExtensions = [
|
|
|
127
127
|
name: "subjectKeyIdentifier",
|
|
128
128
|
},
|
|
129
129
|
];
|
|
130
|
-
var CA = function () {
|
|
130
|
+
var CA = function () {
|
|
131
|
+
this.onCARegenerationCallbacks = [];
|
|
132
|
+
};
|
|
133
|
+
CA.prototype.onCARegenerated = function (callback) {
|
|
134
|
+
this.onCARegenerationCallbacks.push(callback);
|
|
135
|
+
};
|
|
131
136
|
CA.create = function (caFolder, callback) {
|
|
132
137
|
var ca = new CA();
|
|
133
138
|
ca.baseCAFolder = caFolder;
|
|
@@ -140,7 +145,19 @@ CA.create = function (caFolder, callback) {
|
|
|
140
145
|
function (callback) {
|
|
141
146
|
FS.exists(path.join(ca.certsFolder, "ca.pem"), function (exists) {
|
|
142
147
|
if (exists) {
|
|
143
|
-
ca.loadCA(callback);
|
|
148
|
+
// ca.loadCA(callback);
|
|
149
|
+
ca.loadCA(function (err) {
|
|
150
|
+
if (err) {
|
|
151
|
+
return callback(err);
|
|
152
|
+
}
|
|
153
|
+
if (ca.CAcert.validity.notAfter < new Date()) {
|
|
154
|
+
// generate the certificate again since it is expired
|
|
155
|
+
ca.generateCA(callback);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
return callback();
|
|
159
|
+
}
|
|
160
|
+
});
|
|
144
161
|
}
|
|
145
162
|
else {
|
|
146
163
|
ca.generateCA(callback);
|
|
@@ -153,6 +170,7 @@ CA.create = function (caFolder, callback) {
|
|
|
153
170
|
}
|
|
154
171
|
return callback(null, ca);
|
|
155
172
|
});
|
|
173
|
+
return ca;
|
|
156
174
|
};
|
|
157
175
|
CA.prototype.randomSerialNumber = function () {
|
|
158
176
|
// generate random 16 bytes hex string
|
|
@@ -182,12 +200,25 @@ CA.prototype.generateCA = function (callback) {
|
|
|
182
200
|
cert.sign(keys.privateKey, Forge.md.sha256.create());
|
|
183
201
|
self.CAcert = cert;
|
|
184
202
|
self.CAkeys = keys;
|
|
203
|
+
// delete all the keys and certs in the folders, first
|
|
204
|
+
// so that previously generated keys and certs are not used
|
|
205
|
+
async.parallel([
|
|
206
|
+
...FS.readdirSync(self.certsFolder).map((file) => {
|
|
207
|
+
return () => FS.unlinkSync(path.join(self.certsFolder, file));
|
|
208
|
+
}),
|
|
209
|
+
...FS.readdirSync(self.keysFolder).map((file) => {
|
|
210
|
+
return () => FS.unlinkSync(path.join(self.keysFolder, file));
|
|
211
|
+
}),
|
|
212
|
+
], (err) => {
|
|
213
|
+
console.debug("Error while deleting existing certs during CA regeneration: ", err);
|
|
214
|
+
});
|
|
185
215
|
async.parallel([
|
|
186
216
|
FS.writeFile.bind(null, path.join(self.certsFolder, "ca.pem"), pki.certificateToPem(cert)),
|
|
187
217
|
FS.writeFile.bind(null, path.join(self.keysFolder, "ca.private.key"), pki.privateKeyToPem(keys.privateKey)),
|
|
188
218
|
FS.writeFile.bind(null, path.join(self.keysFolder, "ca.public.key"), pki.publicKeyToPem(keys.publicKey)),
|
|
189
219
|
], callback);
|
|
190
|
-
|
|
220
|
+
this.onCARegenerationCallbacks.forEach((callback) => callback(path.join(self.certsFolder, "ca.pem")));
|
|
221
|
+
}.bind(self));
|
|
191
222
|
};
|
|
192
223
|
CA.prototype.loadCA = function (callback) {
|
|
193
224
|
var self = this;
|
|
@@ -12,7 +12,7 @@ var events = require("events");
|
|
|
12
12
|
var WebSocket = require("ws");
|
|
13
13
|
var url = require("url");
|
|
14
14
|
var semaphore = require("semaphore");
|
|
15
|
-
var
|
|
15
|
+
var CA = require("./ca.js");
|
|
16
16
|
var Sentry = require("@sentry/browser");
|
|
17
17
|
const checkInvalidHeaderChar = require("../custom/utils/checkInvalidHeaderChar");
|
|
18
18
|
const debug = require("debug")("http-mitm-proxy");
|
|
@@ -38,6 +38,7 @@ var Proxy = function () {
|
|
|
38
38
|
this.onResponseDataHandlers = [];
|
|
39
39
|
this.onResponseEndHandlers = [];
|
|
40
40
|
this.responseContentPotentiallyModified = false;
|
|
41
|
+
this.onCARegeneratedHandlers = [];
|
|
41
42
|
};
|
|
42
43
|
module.exports.Proxy = Proxy;
|
|
43
44
|
const PROXY_HANDLER_TYPE = {
|
|
@@ -74,7 +75,7 @@ Proxy.prototype.listen = function (options, callback = (e) => { }) {
|
|
|
74
75
|
this.httpsPort = this.forceSNI ? options.httpsPort : undefined;
|
|
75
76
|
this.sslCaDir =
|
|
76
77
|
options.sslCaDir || path.resolve(process.cwd(), ".http-mitm-proxy");
|
|
77
|
-
ca.create(this.sslCaDir, function (err, ca) {
|
|
78
|
+
this.ca = CA.create(this.sslCaDir, function (err, ca) {
|
|
78
79
|
if (err) {
|
|
79
80
|
return callback(err);
|
|
80
81
|
}
|
|
@@ -115,7 +116,8 @@ Proxy.prototype.listen = function (options, callback = (e) => { }) {
|
|
|
115
116
|
callback();
|
|
116
117
|
});
|
|
117
118
|
}
|
|
118
|
-
});
|
|
119
|
+
}.bind(this));
|
|
120
|
+
this.ca.onCARegenerated(this._onCARegenerated.bind(this));
|
|
119
121
|
return this;
|
|
120
122
|
};
|
|
121
123
|
Proxy.prototype._createHttpsServer = function (options, callback) {
|
|
@@ -561,6 +563,12 @@ Proxy.prototype.onCertificateMissing = function (ctx, files, callback) {
|
|
|
561
563
|
});
|
|
562
564
|
return this;
|
|
563
565
|
};
|
|
566
|
+
Proxy.prototype.onCARegenerated = function (fn) {
|
|
567
|
+
this.onCARegeneratedHandlers.push(fn);
|
|
568
|
+
};
|
|
569
|
+
Proxy.prototype._onCARegenerated = function (pathToNewCA) {
|
|
570
|
+
this.onCARegeneratedHandlers.forEach(fn => fn(pathToNewCA));
|
|
571
|
+
};
|
|
564
572
|
Proxy.prototype._onError = function (kind, ctx, err) {
|
|
565
573
|
if (ctx) {
|
|
566
574
|
ctx.currentHandler = PROXY_HANDLER_TYPE.ON_ERROR;
|
package/dist/rq-proxy.js
CHANGED
|
@@ -13,6 +13,9 @@ class RQProxy {
|
|
|
13
13
|
console.log(proxyConfig);
|
|
14
14
|
// @ts-ignore
|
|
15
15
|
this.proxy = new proxy_1.default();
|
|
16
|
+
if (proxyConfig.onCARegenerated) {
|
|
17
|
+
this.proxy.onCARegenerated(proxyConfig.onCARegenerated);
|
|
18
|
+
}
|
|
16
19
|
// console.log(this.proxy);
|
|
17
20
|
this.proxy.listen({
|
|
18
21
|
port: proxyConfig.port,
|
package/dist/types/index.d.ts
CHANGED