@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.
@@ -1,5 +1,6 @@
1
1
  export = CA;
2
2
  declare class CA {
3
+ onCARegenerated(callback: any): void;
3
4
  randomSerialNumber(): string;
4
5
  generateCA(callback: any): void;
5
6
  loadCA(callback: any): void;
@@ -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;
@@ -16,7 +16,7 @@ declare var WebSocket: {
16
16
  };
17
17
  declare var url: any;
18
18
  declare var semaphore: any;
19
- declare var ca: any;
19
+ declare var CA: any;
20
20
  declare var Sentry: any;
21
21
  declare const checkInvalidHeaderChar: any;
22
22
  declare const debug: any;
@@ -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 ca = require("./ca.js");
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,
@@ -1,7 +1,9 @@
1
1
  export interface ProxyConfig {
2
+ [x: string]: any;
2
3
  port: Number;
3
4
  certPath: String;
4
5
  rootCertPath: String;
6
+ onCARegenerated?: Function;
5
7
  }
6
8
  export interface Rule {
7
9
  id: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@requestly/requestly-proxy",
3
- "version": "1.1.24",
3
+ "version": "1.2.0",
4
4
  "description": "Proxy that gives superpowers to all the Requestly clients",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {