#!/usr/bin/env node var program = require('commander'), proxy = require("./proxy.js"), color = require('colorful'), fs = require("fs"), path = require("path"), packageInfo = require("./package.json"); program .version(packageInfo.version) .option('-u, --host [value]', 'hostname for https proxy, localhost for default') .option('-t, --type [value]', 'http|https, http for default') .option('-p, --port [value]', 'proxy port, 8001 for default') .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,') .option('-g, --root [value]', 'generate root CA') .option('-l, --throttle [value]', 'throttle speed in kb/s (kbyte / sec)') .option('-i, --intercept', 'intercept(decrypt) https requests when root CA exists') .option('-c, --clear', 'clear all the tmp certificates') .parse(process.argv); if(program.clear){ require("./lib/certMgr").clearCerts(function(){ console.log( color.green("all certs cleared") ); process.exit(0); }); }else if(program.root){ require("./lib/certMgr").generateRootCA(function(){ process.exit(0); }); }else{ var ruleModule; if(program.rule){ var ruleFilePath = path.join(process.cwd(),program.rule); try{ if(fs.existsSync(ruleFilePath)){ ruleModule = require(ruleFilePath); console.log("rule file loaded :" + ruleFilePath); }else{ console.log(color.red("can not find rule file")); } }catch(e){ console.log("failed to load rule file :" + e.toString()); } } new proxy.proxyServer({ type : program.type, port : program.port, hostname : program.host, dbFile : program.file, throttle : program.throttle, rule : ruleModule, disableWebInterface : false, interceptHttps : program.intercept }); }