allproxy
Version:
AllProxy: MITM HTTP Debugging Tool.
204 lines • 8.95 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setOsBinaries = void 0;
const process_1 = require("process");
const Global_1 = __importDefault(require("./server/src/Global"));
const SocketIoManager_1 = __importStar(require("./server/src/SocketIoManager"));
const Paths_1 = __importDefault(require("./server/src/Paths"));
const GrpcProxy_1 = __importDefault(require("./server/src/GrpcProxy"));
const PortConfig_1 = __importDefault(require("./common/PortConfig"));
const HttpXProxy_1 = __importDefault(require("./server/src/HttpXProxy"));
const GenerateCertKey_1 = require("./server/src/GenerateCertKey");
const Protobuf_1 = require("./server/src/Protobuf");
const path_1 = __importDefault(require("path"));
const fs_1 = __importDefault(require("fs"));
const ConsoleLog_1 = __importDefault(require("./server/src/ConsoleLog"));
const BrowserLauncher_1 = __importDefault(require("./server/src/BrowserLauncher"));
const listen = [];
let hostname = '';
//console.log('app.ts', process.argv);
for (let i = 2; i < process.argv.length; ++i) {
switch (process.argv[i]) {
case '--help':
usage();
(0, process_1.exit)(1);
break;
case '--hostname':
if (i + 1 >= process.argv.length) {
usage();
console.error('\nMissing host name for ' + process.argv[i]);
}
hostname = process.argv[++i];
break;
case '--listen':
case '--listenGrpc':
case '--listenSecureGrpc': {
if (i + 1 >= process.argv.length) {
usage();
console.error('\nMissing port number for ' + process.argv[i]);
}
let protocol = 'httpx:';
switch (process.argv[i]) {
case '--listen':
protocol = 'httpx:';
break;
case '--listenGrpc':
protocol = 'grpc:';
break;
case '--listenSecureGrpc':
protocol = 'securegrpc:';
break;
}
let port = process.argv[++i];
const portNum = +port;
listen.push({
protocol,
port: portNum
});
break;
}
case '--http2':
Global_1.default.useHttp2 = true;
break;
case '--debug':
ConsoleLog_1.default.enableDebug = true;
break;
case '--info':
ConsoleLog_1.default.enableInfo = true;
break;
case '--inDockerContainer':
Global_1.default.inDockerContainer = true;
break;
default:
usage();
console.error('\nInvalid option: ' + process.argv[i]);
(0, process_1.exit)(1);
}
}
if (listen.length === 0) {
listen.push({ protocol: 'httpx:', port: 8888 });
}
function usage() {
console.log('\nUsage: npm start [--hostname name] [--listen port] [--debug]');
console.log('\nOptions:');
console.log('\t--hostname - Public host name used to access AllProxy from the web. The proxy is blocked.');
console.log('\t--listen - listen for incoming http connections. Default is 8888.');
console.log('\t--http2 - Enable HTTP/2 for https connections. (Experimental)');
console.log('\nExample: npm start -- --listen 8888');
}
/**
* Exception handler.
*/
process.on('uncaughtException', (err) => {
var _a;
BrowserLauncher_1.default.shutdown();
if (((_a = err.stack) === null || _a === void 0 ? void 0 : _a.indexOf('Error: This socket has been ended by the other party')) !== -1) {
SocketIoManager_1.socketIoManager.clientEndedSocket();
}
else {
console.trace('uncaughtException:', err.stack);
}
// process.exit()
});
process.on('exit', () => BrowserLauncher_1.default.shutdown());
Paths_1.default.setupInterceptDir();
setOsBinaries(process.platform);
Global_1.default.portConfig = new PortConfig_1.default();
Global_1.default.socketIoManager = new SocketIoManager_1.default();
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; // trust all certificates
(0, Protobuf_1.parseProtoFiles)();
startServers();
function startServers() {
return __awaiter(this, void 0, void 0, function* () {
//console.log('startServers')
yield (0, GenerateCertKey_1.createCertificateAuthority)();
Paths_1.default.copyCaPemToRoot();
BrowserLauncher_1.default.init();
for (const entry of listen) {
const protocol = entry.protocol;
const port = entry.port;
if (hostname !== '') {
console.log(`Using public hostname ${hostname}.`);
console.log("The proxy is blocked.");
Global_1.default.proxyIsBlocked = true;
}
switch (protocol) {
case 'httpx:':
console.log(`Listening on ${protocol} ${port}`);
HttpXProxy_1.default.start(port, hostname);
Global_1.default.portConfig.httpXPort = port;
break;
case 'grpc:':
GrpcProxy_1.default.forwardProxy(port, false);
console.log(`Listening on gRPC ${port}`);
Global_1.default.portConfig.grpcPort = port;
break;
case 'securegrpc:':
GrpcProxy_1.default.forwardProxy(port, true);
console.log(`Listening on secure gRPC ${port}`);
Global_1.default.portConfig.grpcSecurePort = port;
break;
}
}
});
}
function setOsBinaries(os) {
const dirName = __dirname + path_1.default.sep + '..';
const dataDir = process.env.ALLPROXY_DATA_DIR;
if (dataDir) {
const binPath = ':/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin';
switch (os) {
case 'darwin':
fs_1.default.copyFileSync(`${dirName + path_1.default.sep}/bin/macos/trustCert.sh`, `${dataDir}/bin/trustCert.sh`);
fs_1.default.copyFileSync(`${dirName + path_1.default.sep}/bin/macos/systemProxy.sh`, `${dataDir}/bin/systemProxy.sh`);
process.env.PATH += binPath;
break;
case 'win32':
fs_1.default.copyFileSync(`${dirName + path_1.default.sep}bin\\windows\\trustCert.bat`, `${dataDir}\\bin\\trustCert.bat`);
fs_1.default.copyFileSync(`${dirName + path_1.default.sep}bin\\windows\\systemProxy.bat`, `${dataDir}\\bin\\systemProxy.bat`);
break;
case 'linux':
fs_1.default.copyFileSync(`${dirName + path_1.default.sep}/bin/linux/trustCert.sh`, `${dataDir}/bin/trustCert.sh`);
fs_1.default.copyFileSync(`${dirName + path_1.default.sep}/bin/linux/systemProxy.sh`, `${dataDir}/bin/systemProxy.sh`);
process.env.PATH += binPath;
break;
}
}
}
exports.setOsBinaries = setOsBinaries;
//# sourceMappingURL=app.js.map