Skip to content

Commit ac4570d

Browse files
committed
Merge pull request #58 from joeferner/normalize
Normalize and Bump version
2 parents c497f54 + e58b8d5 commit ac4570d

File tree

11 files changed

+51
-49
lines changed

11 files changed

+51
-49
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
HTTP Man In The Middle (MITM) Proxy written in node.js. Supports capturing and modifying the request and response data.
44

5+
[![](https://david-dm.org/joeferner/node-http-mitm-proxy.svg)](https://david-dm.org/joeferner/node-http-mitm-proxy)
6+
57
# Install
68

79
`npm install --save http-mitm-proxy`

examples/modifyGoogle.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var proxy = Proxy();
77

88
proxy.onError(function(ctx, err, errorKind) {
99
// ctx may be null
10-
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : "";
10+
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : '';
1111
console.error(errorKind + ' on ' + url + ':', err);
1212
});
1313

examples/onCertificateMissing.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ var proxy = Proxy();
88

99
proxy.onError(function(ctx, err, errorKind) {
1010
// ctx may be null
11-
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : "";
11+
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : '';
1212
console.error(errorKind + ' on ' + url + ':', err);
1313
});
1414

examples/onCertificateRequired.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ var proxy = Proxy();
88

99
proxy.onError(function(ctx, err, errorKind) {
1010
// ctx may be null
11-
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : "";
11+
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : '';
1212
console.error(errorKind + ' on ' + url + ':', err);
1313
});
1414

examples/preventRequest.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ var proxy = Proxy();
77

88
proxy.onError(function(ctx, err, errorKind) {
99
// ctx may be null
10-
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : "";
10+
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : '';
1111
console.error(errorKind + ' on ' + url + ':', err);
1212
});
1313

1414
proxy.onRequest(function(ctx, callback) {
15-
ctx.proxyToClientResponse.end("Hacked, you cannot proceed to the website");
15+
ctx.proxyToClientResponse.end('Hacked, you cannot proceed to the website');
1616
// no callback() so proxy request is not sent to the server
1717
});
1818

examples/processFullResponseBody.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var proxy = Proxy();
77

88
proxy.onError(function(ctx, err, errorKind) {
99
// ctx may be null
10-
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : "";
10+
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : '';
1111
console.error(errorKind + ' on ' + url + ':', err);
1212
});
1313

@@ -21,8 +21,8 @@ proxy.onRequest(function(ctx, callback) {
2121
});
2222
ctx.onResponseEnd(function(ctx, callback) {
2323
var body = Buffer.concat(chunks);
24-
if(ctx.serverToProxyResponse.headers["content-type"] && ctx.serverToProxyResponse.headers["content-type"].indexOf("text/html") === 0) {
25-
body = body.toString().replace(/Lucky/g, "Sexy");
24+
if(ctx.serverToProxyResponse.headers['content-type'] && ctx.serverToProxyResponse.headers['content-type'].indexOf('text/html') === 0) {
25+
body = body.toString().replace(/Lucky/g, 'Sexy');
2626
}
2727
ctx.proxyToClientResponse.write(body);
2828
return callback();

examples/websocket.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var proxy = Proxy();
77

88
proxy.onError(function(ctx, err, errorKind) {
99
// ctx may be null
10-
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : "";
10+
var url = (ctx && ctx.clientToProxyRequest) ? ctx.clientToProxyRequest.url : '';
1111
console.error(errorKind + ' on ' + url + ':', err);
1212
});
1313
proxy.onWebSocketConnection(function(ctx, callback) {
@@ -16,7 +16,7 @@ proxy.onWebSocketConnection(function(ctx, callback) {
1616
});
1717
proxy.onWebSocketFrame(function(ctx, type, fromServer, message, flags, callback) {
1818
console.log('WEBSOCKET FRAME ' + type + ' received from ' + (fromServer ? 'server' : 'client'), ctx.clientToProxyWebSocket.upgradeReq.url, message);
19-
if (message) var hackedMessage = message.replace(/Rock it/ig, "Hack it");
19+
if (message) var hackedMessage = message.replace(/Rock it/ig, 'Hack it');
2020
return callback(null, message, flags);
2121
});
2222
proxy.onWebSocketError(function(ctx, err) {

lib/ca.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ var CA = function (caFolder) {
132132

133133
CA.prototype.randomSerialNumber = function () {
134134
// generate random 16 bytes hex string
135-
var sn = "";
135+
var sn = '';
136136
for (var i=0; i<4; i++) {
137-
sn += ("00000000" + Math.floor(Math.random()*Math.pow(256, 4)).toString(16)).slice(-8);
137+
sn += ('00000000' + Math.floor(Math.random()*Math.pow(256, 4)).toString(16)).slice(-8);
138138
}
139139
return sn;
140140
}

lib/proxy.js

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var https = require('https');
77
var util = require('util');
88
var fs = require('fs');
99
var path = require('path');
10-
var events = require("events");
10+
var events = require('events');
1111
var mkdirps = require('mkdirps');
1212
var WebSocket = require('ws');
1313
var url = require('url');
@@ -50,11 +50,11 @@ Proxy.prototype.listen = function(options) {
5050
this.sslServers = {};
5151
mkdirps(this.sslCaDir, function(err) {
5252
if (err) {
53-
self._onError("CERT_DIRECTORY_CREATION", null, err);
53+
self._onError('CERT_DIRECTORY_CREATION', null, err);
5454
}
5555
self.httpServer = http.createServer();
5656
self.httpServer.timeout = self.timeout;
57-
self.httpServer.on('error', self._onError.bind(self, "HTTP_SERVER_ERROR", null));
57+
self.httpServer.on('error', self._onError.bind(self, 'HTTP_SERVER_ERROR', null));
5858
self.httpServer.on('connect', self._onHttpServerConnect.bind(self));
5959
self.httpServer.on('request', self._onHttpServerRequest.bind(self, false));
6060
self.wsServer = new WebSocket.Server({ server: self.httpServer });
@@ -219,7 +219,7 @@ Proxy.prototype._onHttpServerConnect = function(req, socket, head) {
219219
self._onHttpServerConnect(req, socket, data);
220220
});
221221
// respond to the client that the connection was made so it can send us data
222-
return socket.write("HTTP/1.1 200 OK\r\n\r\n");
222+
return socket.write('HTTP/1.1 200 OK\r\n\r\n');
223223
}
224224

225225
socket.pause();
@@ -243,7 +243,7 @@ Proxy.prototype._onHttpServerConnect = function(req, socket, head) {
243243
} else {
244244
return openHttpsServer(hostname, function(err, port) {
245245
if (err) {
246-
return self._onError("OPEN_HTTPS_SERVER_ERROR", null, err);
246+
return self._onError('OPEN_HTTPS_SERVER_ERROR', null, err);
247247
}
248248
return makeConnection(port);
249249
});
@@ -261,7 +261,7 @@ Proxy.prototype._onHttpServerConnect = function(req, socket, head) {
261261
socket.emit('data', head);
262262
return socket.resume();
263263
});
264-
conn.on('error', self._onError.bind(self, "PROXY_TO_PROXY_SOCKET_ERROR", null));
264+
conn.on('error', self._onError.bind(self, 'PROXY_TO_PROXY_SOCKET_ERROR', null));
265265
}
266266

267267
function openHttpsServer(hostname, callback) {
@@ -323,8 +323,8 @@ Proxy.prototype._onHttpServerConnect = function(req, socket, head) {
323323
}
324324
var httpsServer = https.createServer(results.httpsOptions);
325325
httpsServer.timeout = self.timeout;
326-
httpsServer.on('error', self._onError.bind(self, "HTTPS_SERVER_ERROR", null));
327-
httpsServer.on('clientError', self._onError.bind(self, "HTTPS_CLIENT_ERROR", null));
326+
httpsServer.on('error', self._onError.bind(self, 'HTTPS_SERVER_ERROR', null));
327+
httpsServer.on('clientError', self._onError.bind(self, 'HTTPS_CLIENT_ERROR', null));
328328
httpsServer.on('connect', self._onHttpServerConnect.bind(self));
329329
httpsServer.on('request', self._onHttpServerRequest.bind(self, true));
330330
self.wssServer = new WebSocket.Server({ server: httpsServer });
@@ -373,10 +373,10 @@ Proxy.prototype._onError = function(kind, ctx, err) {
373373
});
374374

375375
if (ctx.proxyToClientResponse && !ctx.proxyToClientResponse.headersSent) {
376-
ctx.proxyToClientResponse.writeHead(504, "Proxy Error");
376+
ctx.proxyToClientResponse.writeHead(504, 'Proxy Error');
377377
}
378378
if (ctx.proxyToClientResponse && !ctx.proxyToClientResponse.finished) {
379-
ctx.proxyToClientResponse.end(""+kind+": "+err, "utf8");
379+
ctx.proxyToClientResponse.end(''+kind+': '+err, 'utf8');
380380
}
381381
}
382382
};
@@ -455,9 +455,9 @@ Proxy.prototype._onWebSocketServerConnect = function(isSSL, ws) {
455455
ctx.clientToProxyWebSocket.on('close', self._onWebSocketClose.bind(self, ctx, false));
456456
ctx.clientToProxyWebSocket.pause();
457457
var url;
458-
if (ctx.clientToProxyWebSocket.upgradeReq.url == "" || /^\//.test(ctx.clientToProxyWebSocket.upgradeReq.url)) {
458+
if (ctx.clientToProxyWebSocket.upgradeReq.url == '' || /^\//.test(ctx.clientToProxyWebSocket.upgradeReq.url)) {
459459
var hostPort = Proxy.parseHostAndPort(ctx.clientToProxyWebSocket.upgradeReq);
460-
url = (ctx.isSSL ? "wss" : "ws") + "://" + hostPort.host + (hostPort.port ? ":" + hostPort.port : "") + ctx.clientToProxyWebSocket.upgradeReq.url;
460+
url = (ctx.isSSL ? 'wss' : 'ws') + '://' + hostPort.host + (hostPort.port ? ':' + hostPort.port : '') + ctx.clientToProxyWebSocket.upgradeReq.url;
461461
} else {
462462
url = ctx.clientToProxyWebSocket.upgradeReq.url;
463463
}
@@ -567,8 +567,8 @@ Proxy.prototype._onHttpServerRequest = function(isSSL, clientToProxyRequest, pro
567567
}
568568
};
569569

570-
ctx.clientToProxyRequest.on('error', self._onError.bind(self, "CLIENT_TO_PROXY_REQUEST_ERROR", ctx));
571-
ctx.proxyToClientResponse.on('error', self._onError.bind(self, "PROXY_TO_CLIENT_RESPONSE_ERROR", ctx));
570+
ctx.clientToProxyRequest.on('error', self._onError.bind(self, 'CLIENT_TO_PROXY_REQUEST_ERROR', ctx));
571+
ctx.proxyToClientResponse.on('error', self._onError.bind(self, 'PROXY_TO_CLIENT_RESPONSE_ERROR', ctx));
572572
ctx.clientToProxyRequest.pause();
573573
var hostPort = Proxy.parseHostAndPort(ctx.clientToProxyRequest, ctx.isSSL ? 443 : 80);
574574
ctx.proxyToServerRequestOptions = {
@@ -581,11 +581,11 @@ Proxy.prototype._onHttpServerRequest = function(isSSL, clientToProxyRequest, pro
581581
};
582582
return self._onRequest(ctx, function(err) {
583583
if (err) {
584-
return self._onError("ON_REQUEST_ERROR", ctx, err);
584+
return self._onError('ON_REQUEST_ERROR', ctx, err);
585585
}
586586
return self._onRequestHeaders(ctx, function(err) {
587587
if (err) {
588-
return self._onError("ON_REQUESTHEADERS_ERROR", ctx, err);
588+
return self._onError('ON_REQUESTHEADERS_ERROR', ctx, err);
589589
}
590590
return makeProxyToServerRequest();
591591
});
@@ -594,7 +594,7 @@ Proxy.prototype._onHttpServerRequest = function(isSSL, clientToProxyRequest, pro
594594
function makeProxyToServerRequest() {
595595
var proto = ctx.isSSL ? https : http;
596596
ctx.proxyToServerRequest = proto.request(ctx.proxyToServerRequestOptions, proxyToServerRequestComplete);
597-
ctx.proxyToServerRequest.on('error', self._onError.bind(self, "PROXY_TO_SERVER_REQUEST_ERROR", ctx));
597+
ctx.proxyToServerRequest.on('error', self._onError.bind(self, 'PROXY_TO_SERVER_REQUEST_ERROR', ctx));
598598
ctx.requestFilters.push(new ProxyFinalRequestFilter(self, ctx));
599599
var prevRequestPipeElem = ctx.clientToProxyRequest;
600600
ctx.requestFilters.forEach(function(filter) {
@@ -604,18 +604,18 @@ Proxy.prototype._onHttpServerRequest = function(isSSL, clientToProxyRequest, pro
604604
}
605605

606606
function proxyToServerRequestComplete(serverToProxyResponse) {
607-
serverToProxyResponse.on('error', self._onError.bind(self, "SERVER_TO_PROXY_RESPONSE_ERROR", ctx));
607+
serverToProxyResponse.on('error', self._onError.bind(self, 'SERVER_TO_PROXY_RESPONSE_ERROR', ctx));
608608
serverToProxyResponse.pause();
609609
ctx.serverToProxyResponse = serverToProxyResponse;
610610
return self._onResponse(ctx, function(err) {
611611
if (err) {
612-
return self._onError("ON_RESPONSE_ERROR", ctx, err);
612+
return self._onError('ON_RESPONSE_ERROR', ctx, err);
613613
}
614614
ctx.serverToProxyResponse.headers['transfer-encoding'] = 'chunked';
615615
ctx.serverToProxyResponse.headers['connection'] = 'close';
616616
return self._onResponseHeaders(ctx, function (err) {
617617
if (err) {
618-
return self._onError("ON_RESPONSEHEADERS_ERROR", ctx, err);
618+
return self._onError('ON_RESPONSEHEADERS_ERROR', ctx, err);
619619
}
620620
ctx.proxyToClientResponse.writeHead(ctx.serverToProxyResponse.statusCode, canonizeHeaders(ctx.serverToProxyResponse.headers));
621621
ctx.responseFilters.push(new ProxyFinalResponseFilter(self, ctx));
@@ -645,7 +645,7 @@ var ProxyFinalRequestFilter = function(proxy, ctx) {
645645
this.write = function(chunk) {
646646
proxy._onRequestData(ctx, chunk, function(err, chunk) {
647647
if (err) {
648-
return proxy._onError("ON_REQUEST_DATA_ERROR", ctx, err);
648+
return proxy._onError('ON_REQUEST_DATA_ERROR', ctx, err);
649649
}
650650
if (chunk) {
651651
return ctx.proxyToServerRequest.write(chunk);
@@ -658,20 +658,20 @@ var ProxyFinalRequestFilter = function(proxy, ctx) {
658658
if (chunk) {
659659
return proxy._onRequestData(ctx, chunk, function(err, chunk) {
660660
if (err) {
661-
return proxy._onError("ON_REQUEST_DATA_ERROR", ctx, err);
661+
return proxy._onError('ON_REQUEST_DATA_ERROR', ctx, err);
662662
}
663663

664664
return proxy._onRequestEnd(ctx, function (err) {
665665
if (err) {
666-
return proxy._onError("ON_REQUEST_END_ERROR", ctx, err);
666+
return proxy._onError('ON_REQUEST_END_ERROR', ctx, err);
667667
}
668668
return ctx.proxyToServerRequest.end(chunk);
669669
});
670670
});
671671
} else {
672672
return proxy._onRequestEnd(ctx, function (err) {
673673
if (err) {
674-
return proxy._onError("ON_REQUEST_END_ERROR", ctx, err);
674+
return proxy._onError('ON_REQUEST_END_ERROR', ctx, err);
675675
}
676676
return ctx.proxyToServerRequest.end(chunk || undefined);
677677
});
@@ -687,7 +687,7 @@ var ProxyFinalResponseFilter = function(proxy, ctx) {
687687
this.write = function(chunk) {
688688
proxy._onResponseData(ctx, chunk, function(err, chunk) {
689689
if (err) {
690-
return proxy._onError("ON_RESPONSE_DATA_ERROR", ctx, err);
690+
return proxy._onError('ON_RESPONSE_DATA_ERROR', ctx, err);
691691
}
692692
if (chunk) {
693693
return ctx.proxyToClientResponse.write(chunk);
@@ -700,20 +700,20 @@ var ProxyFinalResponseFilter = function(proxy, ctx) {
700700
if (chunk) {
701701
return proxy._onResponseData(ctx, chunk, function(err, chunk) {
702702
if (err) {
703-
return proxy._onError("ON_RESPONSE_DATA_ERROR", ctx, err);
703+
return proxy._onError('ON_RESPONSE_DATA_ERROR', ctx, err);
704704
}
705705

706706
return proxy._onResponseEnd(ctx, function (err) {
707707
if (err) {
708-
return proxy._onError("ON_RESPONSE_END_ERROR", ctx, err);
708+
return proxy._onError('ON_RESPONSE_END_ERROR', ctx, err);
709709
}
710710
return ctx.proxyToClientResponse.end(chunk || undefined);
711711
});
712712
});
713713
} else {
714714
return proxy._onResponseEnd(ctx, function (err) {
715715
if (err) {
716-
return proxy._onError("ON_RESPONSE_END_ERROR", ctx, err);
716+
return proxy._onError('ON_RESPONSE_END_ERROR', ctx, err);
717717
}
718718
return ctx.proxyToClientResponse.end(chunk || undefined);
719719
});
@@ -824,7 +824,7 @@ Proxy.prototype._onRequestData = function(ctx, chunk, callback) {
824824
});
825825
}, function(err) {
826826
if (err) {
827-
return self._onError("ON_REQUEST_DATA_ERROR", ctx, err);
827+
return self._onError('ON_REQUEST_DATA_ERROR', ctx, err);
828828
}
829829
return callback(null, chunk);
830830
});
@@ -836,7 +836,7 @@ Proxy.prototype._onRequestEnd = function(ctx, callback) {
836836
return fn(ctx, callback);
837837
}, function(err) {
838838
if (err) {
839-
return self._onError("ON_REQUEST_END_ERROR", ctx, err);
839+
return self._onError('ON_REQUEST_END_ERROR', ctx, err);
840840
}
841841
return callback(null);
842842
});
@@ -866,7 +866,7 @@ Proxy.prototype._onResponseData = function(ctx, chunk, callback) {
866866
});
867867
}, function(err) {
868868
if (err) {
869-
return self._onError("ON_RESPONSE_DATA_ERROR", ctx, err);
869+
return self._onError('ON_RESPONSE_DATA_ERROR', ctx, err);
870870
}
871871
return callback(null, chunk);
872872
});
@@ -878,7 +878,7 @@ Proxy.prototype._onResponseEnd = function(ctx, callback) {
878878
return fn(ctx, callback);
879879
}, function(err) {
880880
if (err) {
881-
return self._onError("ON_RESPONSE_END_ERROR", ctx, err);
881+
return self._onError('ON_RESPONSE_END_ERROR', ctx, err);
882882
}
883883
return callback(null);
884884
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "http-mitm-proxy",
3-
"version": "0.2.0",
3+
"version": "0.3.0",
44
"description": "HTTP Man In The Middle (MITM) Proxy",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)