update eslint config

This commit is contained in:
xiaofeng.mxf 2020-01-01 16:45:58 +08:00
parent f653718dc4
commit 8951fb68ef
10 changed files with 160 additions and 163 deletions

View File

@ -87,7 +87,7 @@ class Recorder extends events.EventEmitter {
this.cachePath = getCacheDir(); this.cachePath = getCacheDir();
this.db = new Datastore(); this.db = new Datastore();
this.recordBodyMap = []; // id - body this.recordBodyMap = []; // id - body
} }
setDbAutoCompact() { setDbAutoCompact() {

View File

@ -365,7 +365,7 @@ function getUserReqHandler(userRule, recorder) {
if (!global._throttle if (!global._throttle
&& transferEncoding !== 'chunked' && transferEncoding !== 'chunked'
&& !(responseBody instanceof CommonReadableStream) && !(responseBody instanceof CommonReadableStream)
) { ) {
resHeader['Content-Length'] = util.getByteSize(responseBody); resHeader['Content-Length'] = util.getByteSize(responseBody);
} }
@ -550,142 +550,142 @@ function getConnectReqHandler(userRule, recorder, httpsServerMgr) {
shouldIntercept = reqHandlerCtx.forceProxyHttps; shouldIntercept = reqHandlerCtx.forceProxyHttps;
} }
}) })
.then(() => { .then(() => {
return new Promise((resolve) => { return new Promise((resolve) => {
// mark socket connection as established, to detect the request protocol // mark socket connection as established, to detect the request protocol
cltSocket.write('HTTP/' + req.httpVersion + ' 200 OK\r\n\r\n', 'UTF-8', resolve); cltSocket.write('HTTP/' + req.httpVersion + ' 200 OK\r\n\r\n', 'UTF-8', resolve);
});
})
.then(() => {
return new Promise((resolve, reject) => {
let resolved = false;
cltSocket.on('data', (chunk) => {
requestStream.push(chunk);
if (!resolved) {
resolved = true;
try {
const chunkString = chunk.toString();
if (chunkString.indexOf('GET ') === 0) {
shouldIntercept = false; // websocket, do not intercept
// if there is '/do-not-proxy' in the request, do not intercept the websocket
// to avoid AnyProxy itself be proxied
if (reqHandlerCtx.wsIntercept && chunkString.indexOf('GET /do-not-proxy') !== 0) {
interceptWsRequest = true;
}
}
} catch (e) {
console.error(e);
}
resolve();
}
}); });
cltSocket.on('error', (error) => { })
logUtil.printLog(util.collectErrorLog(error), logUtil.T_ERR); .then(() => {
co.wrap(function *() { return new Promise((resolve, reject) => {
try { let resolved = false;
yield userRule.onClientSocketError(requestDetail, error); cltSocket.on('data', (chunk) => {
} catch (e) { } requestStream.push(chunk);
if (!resolved) {
resolved = true;
try {
const chunkString = chunk.toString();
if (chunkString.indexOf('GET ') === 0) {
shouldIntercept = false; // websocket, do not intercept
// if there is '/do-not-proxy' in the request, do not intercept the websocket
// to avoid AnyProxy itself be proxied
if (reqHandlerCtx.wsIntercept && chunkString.indexOf('GET /do-not-proxy') !== 0) {
interceptWsRequest = true;
}
}
} catch (e) {
console.error(e);
}
resolve();
}
});
cltSocket.on('error', (error) => {
logUtil.printLog(util.collectErrorLog(error), logUtil.T_ERR);
co.wrap(function *() {
try {
yield userRule.onClientSocketError(requestDetail, error);
} catch (e) { }
});
});
cltSocket.on('end', () => {
requestStream.push(null);
}); });
}); });
cltSocket.on('end', () => { })
requestStream.push(null); .then((result) => {
});
});
})
.then((result) => {
// log and recorder // log and recorder
if (shouldIntercept) { if (shouldIntercept) {
logUtil.printLog('will forward to local https server'); logUtil.printLog('will forward to local https server');
} else { } else {
logUtil.printLog('will bypass the man-in-the-middle proxy'); logUtil.printLog('will bypass the man-in-the-middle proxy');
} }
//record //record
if (recorder) { if (recorder) {
resourceInfo = { resourceInfo = {
host, host,
method: req.method, method: req.method,
path: '', path: '',
url: 'https://' + host, url: 'https://' + host,
req, req,
startTime: new Date().getTime() startTime: new Date().getTime()
}; };
resourceInfoId = recorder.appendRecord(resourceInfo); resourceInfoId = recorder.appendRecord(resourceInfo);
} }
}) })
.then(() => { .then(() => {
// determine the request target // determine the request target
if (!shouldIntercept) { if (!shouldIntercept) {
// server info from the original request // server info from the original request
const originServer = { const originServer = {
host, host,
port: (targetPort === 80) ? 443 : targetPort port: (targetPort === 80) ? 443 : targetPort
}
const localHttpServer = {
host: 'localhost',
port: reqHandlerCtx.httpServerPort
}
// for ws request, redirect them to local ws server
return interceptWsRequest ? localHttpServer : originServer;
} else {
return httpsServerMgr.getSharedHttpsServer(host).then(serverInfo => ({ host: serverInfo.host, port: serverInfo.port }));
}
})
.then((serverInfo) => {
if (!serverInfo.port || !serverInfo.host) {
throw new Error('failed to get https server info');
}
return new Promise((resolve, reject) => {
const conn = net.connect(serverInfo.port, serverInfo.host, () => {
//throttle for direct-foward https
if (global._throttle && !shouldIntercept) {
requestStream.pipe(conn);
conn.pipe(global._throttle.throttle()).pipe(cltSocket);
} else {
requestStream.pipe(conn);
conn.pipe(cltSocket);
} }
resolve(); const localHttpServer = {
host: 'localhost',
port: reqHandlerCtx.httpServerPort
}
// for ws request, redirect them to local ws server
return interceptWsRequest ? localHttpServer : originServer;
} else {
return httpsServerMgr.getSharedHttpsServer(host).then(serverInfo => ({ host: serverInfo.host, port: serverInfo.port }));
}
})
.then((serverInfo) => {
if (!serverInfo.port || !serverInfo.host) {
throw new Error('failed to get https server info');
}
return new Promise((resolve, reject) => {
const conn = net.connect(serverInfo.port, serverInfo.host, () => {
//throttle for direct-foward https
if (global._throttle && !shouldIntercept) {
requestStream.pipe(conn);
conn.pipe(global._throttle.throttle()).pipe(cltSocket);
} else {
requestStream.pipe(conn);
conn.pipe(cltSocket);
}
resolve();
});
conn.on('error', (e) => {
reject(e);
});
reqHandlerCtx.conns.set(serverInfo.host + ':' + serverInfo.port, conn)
reqHandlerCtx.cltSockets.set(serverInfo.host + ':' + serverInfo.port, cltSocket)
}); });
})
.then(() => {
if (recorder) {
resourceInfo.endTime = new Date().getTime();
resourceInfo.statusCode = '200';
resourceInfo.resHeader = {};
resourceInfo.resBody = '';
resourceInfo.length = 0;
conn.on('error', (e) => { recorder && recorder.updateRecord(resourceInfoId, resourceInfo);
reject(e); }
}); })
.catch(co.wrap(function *(error) {
logUtil.printLog(util.collectErrorLog(error), logUtil.T_ERR);
reqHandlerCtx.conns.set(serverInfo.host + ':' + serverInfo.port, conn) try {
reqHandlerCtx.cltSockets.set(serverInfo.host + ':' + serverInfo.port, cltSocket) yield userRule.onConnectError(requestDetail, error);
}); } catch (e) { }
})
.then(() => {
if (recorder) {
resourceInfo.endTime = new Date().getTime();
resourceInfo.statusCode = '200';
resourceInfo.resHeader = {};
resourceInfo.resBody = '';
resourceInfo.length = 0;
recorder && recorder.updateRecord(resourceInfoId, resourceInfo); try {
} let errorHeader = 'Proxy-Error: true\r\n';
}) errorHeader += 'Proxy-Error-Message: ' + (error || 'null') + '\r\n';
.catch(co.wrap(function *(error) { errorHeader += 'Content-Type: text/html\r\n';
logUtil.printLog(util.collectErrorLog(error), logUtil.T_ERR); cltSocket.write('HTTP/1.1 502\r\n' + errorHeader + '\r\n\r\n');
} catch (e) { }
try { }));
yield userRule.onConnectError(requestDetail, error);
} catch (e) { }
try {
let errorHeader = 'Proxy-Error: true\r\n';
errorHeader += 'Proxy-Error-Message: ' + (error || 'null') + '\r\n';
errorHeader += 'Content-Type: text/html\r\n';
cltSocket.write('HTTP/1.1 502\r\n' + errorHeader + '\r\n\r\n');
} catch (e) { }
}));
} }
} }
@ -844,7 +844,6 @@ function getWsHandler(userRule, recorder, wsClient, wsReq) {
} }
class RequestHandler { class RequestHandler {
/** /**
* Creates an instance of RequestHandler. * Creates an instance of RequestHandler.
* *

View File

@ -82,16 +82,16 @@ macProxyManager.enableGlobalProxy = (ip, port, proxyType) => {
// set http proxy // set http proxy
execSync( execSync(
'networksetup -setwebproxy ${networkType} ${ip} ${port} && networksetup -setproxybypassdomains ${networkType} 127.0.0.1 localhost' 'networksetup -setwebproxy ${networkType} ${ip} ${port} && networksetup -setproxybypassdomains ${networkType} 127.0.0.1 localhost'
.replace(/\${networkType}/g, networkType) .replace(/\${networkType}/g, networkType)
.replace('${ip}', ip) .replace('${ip}', ip)
.replace('${port}', port)) : .replace('${port}', port)) :
// set https proxy // set https proxy
execSync('networksetup -setsecurewebproxy ${networkType} ${ip} ${port} && networksetup -setproxybypassdomains ${networkType} 127.0.0.1 localhost' execSync('networksetup -setsecurewebproxy ${networkType} ${ip} ${port} && networksetup -setproxybypassdomains ${networkType} 127.0.0.1 localhost'
.replace(/\${networkType}/g, networkType) .replace(/\${networkType}/g, networkType)
.replace('${ip}', ip) .replace('${ip}', ip)
.replace('${port}', port)); .replace('${port}', port));
}; };
macProxyManager.disableGlobalProxy = (proxyType) => { macProxyManager.disableGlobalProxy = (proxyType) => {
@ -101,13 +101,13 @@ macProxyManager.disableGlobalProxy = (proxyType) => {
// set http proxy // set http proxy
execSync( execSync(
'networksetup -setwebproxystate ${networkType} off' 'networksetup -setwebproxystate ${networkType} off'
.replace('${networkType}', networkType)) : .replace('${networkType}', networkType)) :
// set https proxy // set https proxy
execSync( execSync(
'networksetup -setsecurewebproxystate ${networkType} off' 'networksetup -setsecurewebproxystate ${networkType} off'
.replace('${networkType}', networkType)); .replace('${networkType}', networkType));
}; };
macProxyManager.getProxyState = () => { macProxyManager.getProxyState = () => {
@ -136,8 +136,8 @@ winProxyManager.enableGlobalProxy = (ip, port) => {
return execSync( return execSync(
// set proxy // set proxy
'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyServer /t REG_SZ /d ${ip}:${port} /f & ' 'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyServer /t REG_SZ /d ${ip}:${port} /f & '
.replace('${ip}', ip) .replace('${ip}', ip)
.replace('${port}', port) + .replace('${port}', port) +
// enable proxy // enable proxy
'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f'); 'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f');

View File

@ -29,7 +29,6 @@ const certFileTypes = ['crt', 'cer', 'pem', 'der'];
* @extends {events.EventEmitter} * @extends {events.EventEmitter}
*/ */
class webInterface extends events.EventEmitter { class webInterface extends events.EventEmitter {
/** /**
* Creates an instance of webInterface. * Creates an instance of webInterface.
* *

View File

@ -3,7 +3,7 @@ const exec = require('child_process').exec;
if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) { if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {
AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => { AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {
// let users to trust this CA before using proxy // let users to trust this CA before using proxy
if (!error) { if (!error) {
const certDir = require('path').dirname(keyPath); const certDir = require('path').dirname(keyPath);
console.log('The cert is generated at', certDir); console.log('The cert is generated at', certDir);
@ -18,6 +18,6 @@ if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {
} }
}); });
} else { } else {
// clear all the certificates // clear all the certificates
// AnyProxy.utils.certMgr.clearCerts() // AnyProxy.utils.certMgr.clearCerts()
} }

View File

@ -54,7 +54,7 @@
"babel-register": "^6.11.6", "babel-register": "^6.11.6",
"babel-runtime": "^6.11.6", "babel-runtime": "^6.11.6",
"css-loader": "^0.23.1", "css-loader": "^0.23.1",
"eslint": "^3.5.0", "eslint": ">=4.18.2",
"eslint-config-airbnb": "^15.1.0", "eslint-config-airbnb": "^15.1.0",
"eslint-plugin-import": "^2.7.0", "eslint-plugin-import": "^2.7.0",
"eslint-plugin-jsx-a11y": "^5.1.1", "eslint-plugin-jsx-a11y": "^5.1.1",

View File

@ -47,7 +47,6 @@ const PROXY_STATUS_CLOSED = 'CLOSED';
* @extends {events.EventEmitter} * @extends {events.EventEmitter}
*/ */
class ProxyCore extends events.EventEmitter { class ProxyCore extends events.EventEmitter {
/** /**
* Creates an instance of ProxyCore. * Creates an instance of ProxyCore.
* *
@ -135,7 +134,7 @@ class ProxyCore extends events.EventEmitter {
*/ */
handleExistConnections(socket) { handleExistConnections(socket) {
const self = this; const self = this;
self.socketIndex ++; self.socketIndex++;
const key = `socketIndex_${self.socketIndex}`; const key = `socketIndex_${self.socketIndex}`;
self.socketPool[key] = socket; self.socketPool[key] = socket;

View File

@ -63,20 +63,20 @@ function test(url, requestHeaders = {}) {
done(); done();
}); });
}) })
.catch((err) => {
printError(err);
done();
});
})
.catch((err) => { .catch((err) => {
printError(err); printError(err);
done(); done();
}); });
}) })
.catch((err) => { .catch((err) => {
printError(err); printError(err);
done(); done();
}); });
})
.catch((err) => {
printError(err);
done();
});
}); });
}) })
}) })

View File

@ -328,16 +328,16 @@ function getRequestListFromPage(pageUrl, cb) {
}, _outObj); }, _outObj);
return _page.open(pageUrl); return _page.open(pageUrl);
}) })
.then(status => _outObj.property('urls')) .then(status => _outObj.property('urls'))
.then(urls => { .then(urls => {
_page.close(); _page.close();
_ph.exit(); _ph.exit();
return urls; return urls;
}) })
.catch((err) => { .catch((err) => {
console.log(`failed to collecting requests from ${pageUrl}`); console.log(`failed to collecting requests from ${pageUrl}`);
console.log(err); console.log(err);
}); });
} }

View File

@ -10,10 +10,10 @@ const DEFAULT_OPTIONS = {
port: 8001, port: 8001,
webInterface: { webInterface: {
enable: true, enable: true,
webPort: 8002, // optional, port for web interface webPort: 8002, // optional, port for web interface
}, },
wsIntercept: true, wsIntercept: true,
throttle: 10000, // optional, speed limit in kb/s throttle: 10000, // optional, speed limit in kb/s
forceProxyHttps: true, // intercept https as well forceProxyHttps: true, // intercept https as well
dangerouslyIgnoreUnauthorized: true, dangerouslyIgnoreUnauthorized: true,
silent: false //optional, do not print anything into terminal. do not set it when you are still debugging. silent: false //optional, do not print anything into terminal. do not set it when you are still debugging.