@requestly/requestly-proxy 1.1.24 → 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/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;
|
|
@@ -165,6 +170,7 @@ CA.create = function (caFolder, callback) {
|
|
|
165
170
|
}
|
|
166
171
|
return callback(null, ca);
|
|
167
172
|
});
|
|
173
|
+
return ca;
|
|
168
174
|
};
|
|
169
175
|
CA.prototype.randomSerialNumber = function () {
|
|
170
176
|
// generate random 16 bytes hex string
|
|
@@ -194,12 +200,25 @@ CA.prototype.generateCA = function (callback) {
|
|
|
194
200
|
cert.sign(keys.privateKey, Forge.md.sha256.create());
|
|
195
201
|
self.CAcert = cert;
|
|
196
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
|
+
});
|
|
197
215
|
async.parallel([
|
|
198
216
|
FS.writeFile.bind(null, path.join(self.certsFolder, "ca.pem"), pki.certificateToPem(cert)),
|
|
199
217
|
FS.writeFile.bind(null, path.join(self.keysFolder, "ca.private.key"), pki.privateKeyToPem(keys.privateKey)),
|
|
200
218
|
FS.writeFile.bind(null, path.join(self.keysFolder, "ca.public.key"), pki.publicKeyToPem(keys.publicKey)),
|
|
201
219
|
], callback);
|
|
202
|
-
|
|
220
|
+
this.onCARegenerationCallbacks.forEach((callback) => callback(path.join(self.certsFolder, "ca.pem")));
|
|
221
|
+
}.bind(self));
|
|
203
222
|
};
|
|
204
223
|
CA.prototype.loadCA = function (callback) {
|
|
205
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