anyproxy/bin.js

102 lines
3.7 KiB
JavaScript
Raw Normal View History

2014-08-11 17:54:19 +08:00
#!/usr/bin/env node
2014-08-14 10:59:49 +08:00
var program = require('commander'),
2014-08-13 11:51:39 +08:00
color = require('colorful'),
2015-01-12 11:41:56 +08:00
fs = require("fs"),
2015-01-29 11:00:42 +08:00
path = require("path"),
npm = require("npm"),
packageInfo = require("./package.json"),
2015-07-22 13:26:22 +08:00
util = require("./lib/util"),
logUtil = require("./lib/log");
2015-01-12 11:41:56 +08:00
2014-08-11 10:28:16 +08:00
program
2015-01-12 11:41:56 +08:00
.version(packageInfo.version)
2014-08-11 10:28:16 +08:00
.option('-u, --host [value]', 'hostname for https proxy, localhost for default')
2014-10-23 11:07:02 +08:00
.option('-t, --type [value]', 'http|https, http for default')
2014-08-11 10:28:16 +08:00
.option('-p, --port [value]', 'proxy port, 8001 for default')
.option('-w, --web [value]' , 'web GUI port, 8002 for default')
.option('-e, --ws [value]' , 'web socket port, 8003 for default')
2014-10-23 11:07:02 +08:00
.option('-f, --file [value]', 'save request data to a specified file, will use in-memory db if not specified')
.option('-r, --rule [value]', 'path for rule file,')
2014-08-13 11:51:39 +08:00
.option('-g, --root [value]', 'generate root CA')
2014-10-31 18:51:24 +08:00
.option('-l, --throttle [value]', 'throttle speed in kb/s (kbyte / sec)')
2015-01-22 10:16:19 +08:00
.option('-i, --intercept', 'intercept(decrypt) https requests when root CA exists')
.option('-s, --silent', 'do not print anything into terminal')
2014-08-11 10:28:16 +08:00
.option('-c, --clear', 'clear all the tmp certificates')
2016-04-05 22:09:07 +08:00
.option('-o, --global', 'set as global proxy for system')
2015-08-06 17:26:22 +08:00
.option('install', '[alpha] install node modules')
2014-08-11 10:28:16 +08:00
.parse(process.argv);
if(program.clear){
2014-08-11 16:43:14 +08:00
require("./lib/certMgr").clearCerts(function(){
2014-08-13 11:51:39 +08:00
console.log( color.green("all certs cleared") );
2014-08-11 10:28:16 +08:00
process.exit(0);
});
2014-08-13 11:51:39 +08:00
}else if(program.root){
require("./lib/certMgr").generateRootCA(function(){
process.exit(0);
});
2015-03-30 17:39:23 +08:00
}else if(program.install){
npm.load({
"prefix": process.env.NODE_PATH + '/anyproxy/'
}, function (er) {
npm.commands.install(program.args || [], function (er, data) {
if(er)throw er;
});
npm.registry.log.on("log", function (message) {});
});
2014-08-11 10:28:16 +08:00
}else{
var proxy = require("./proxy.js");
2014-09-04 11:22:35 +08:00
var ruleModule;
if(program.silent){
logUtil.setPrintStatus(false);
}
2014-09-04 11:22:35 +08:00
if(program.rule){
2015-03-19 11:48:05 +08:00
var ruleFilePath = path.resolve(process.cwd(),program.rule);
2015-01-29 11:00:42 +08:00
try{
if(fs.existsSync(ruleFilePath)){
ruleModule = require(ruleFilePath);
logUtil.printLog("rule file loaded :" + ruleFilePath);
2015-01-29 11:00:42 +08:00
}else{
var logText = color.red("can not find rule file at " + ruleFilePath);
logUtil.printLog(logText, logUtil.T_ERR);
2014-09-04 11:22:35 +08:00
}
2015-01-29 11:00:42 +08:00
}catch(e){
logUtil.printLog("failed to load rule file :" + e.toString(), logUtil.T_ERR);
2014-09-04 11:22:35 +08:00
}
2015-07-22 13:26:22 +08:00
}else{
2016-04-03 02:04:27 +08:00
//a feature for donghua.yan
2015-07-22 13:26:22 +08:00
//read rule file from a specific position
(function(){
try{
2015-08-06 17:26:22 +08:00
var anyproxyHome = path.join(util.getAnyProxyHome());
2015-07-22 13:26:22 +08:00
if(fs.existsSync(path.join(anyproxyHome,"rule_default.js"))){
ruleModule = require(path.join(anyproxyHome,"rule_default"));
}
if(fs.existsSync(path.join(process.cwd(),'rule.js'))){
ruleModule = require(path.join(process.cwd(),'rule'));
}
}catch(e){}
})();
2014-09-04 11:22:35 +08:00
}
new proxy.proxyServer({
2015-01-22 10:16:19 +08:00
type : program.type,
port : program.port,
hostname : program.host,
dbFile : program.file,
throttle : program.throttle,
webPort : program.web,
socketPort : program.ws,
2015-01-22 10:16:19 +08:00
rule : ruleModule,
disableWebInterface : false,
2016-04-05 22:09:07 +08:00
setAsGlobalProxy : program.global,
interceptHttps : program.intercept,
silent : program.silent
2014-09-04 11:22:35 +08:00
});
}