This commit is contained in:
加里 2014-08-09 16:33:51 +08:00
parent cf77e0ec1f
commit 5e87fd0707

View File

@ -10,9 +10,10 @@ var http = require('http'),
program = require('commander'); program = require('commander');
program program
.option('-h, --host [value]', 'hostname,use for https proxy. localhost for default') .option('-h, --host [value]', 'hostname for https proxy, localhost for default')
.option('-t, --type [value]', 'http|https,http for default') .option('-t, --type [value]', 'http|https,http for default')
.option('-p, --port [value]', 'proxy port , 8001 for default') .option('-p, --port [value]', 'proxy port, 8001 for default')
.option('-c, --clear', 'clear all the tmp certificates')
.parse(process.argv); .parse(process.argv);
var PROXY_PORT = program.port || 8001, var PROXY_PORT = program.port || 8001,
@ -21,55 +22,64 @@ var PROXY_PORT = program.port || 8001,
PROXY_TYPE = /https/i.test(program.type)? T_PROXY_HTTPS : T_PROXY_HTTP; PROXY_TYPE = /https/i.test(program.type)? T_PROXY_HTTPS : T_PROXY_HTTP;
HOSTNAME = program.host || "localhost"; HOSTNAME = program.host || "localhost";
var serverMgrInstance = new serverMgr(), if(program.clear){
httpProxyServer; exec("rm -rf ./cert/tmpCert",function(){
console.log("certificates cleared");
process.exit(0);
});
}else{
var serverMgrInstance = new serverMgr(),
httpProxyServer;
async.series([
//creat server
function(callback){
if(PROXY_TYPE == T_PROXY_HTTP){
httpProxyServer = http.createServer(dealProxyUserHttpReq);
callback(null);
}else{
async.series([ var keyFile = "./cert/tmpCert/__hostname.key".replace(/__hostname/,HOSTNAME),
//creat server crtFile = "./cert/tmpCert/__hostname.crt".replace(/__hostname/,HOSTNAME);
function(callback){
if(PROXY_TYPE == T_PROXY_HTTP){
httpProxyServer = http.createServer(dealProxyUserHttpReq);
callback(null);
}else{
var keyFile = "./cert/tmpCert/__hostname.key".replace(/__hostname/,HOSTNAME), if(!fs.existsSync(keyFile) || !fs.existsSync(crtFile)){
crtFile = "./cert/tmpCert/__hostname.crt".replace(/__hostname/,HOSTNAME); createCert(HOSTNAME,function(){
httpProxyServer = https.createServer({
if(!fs.existsSync(keyFile) || !fs.existsSync(crtFile)){ key : fs.readFileSync(keyFile),
createCert(HOSTNAME,function(){ cert: fs.readFileSync(crtFile)
},dealProxyUserHttpReq);
callback(null);
});
}else{
httpProxyServer = https.createServer({ httpProxyServer = https.createServer({
key : fs.readFileSync(keyFile), key : fs.readFileSync(keyFile),
cert: fs.readFileSync(crtFile) cert: fs.readFileSync(crtFile)
},dealProxyUserHttpReq); },dealProxyUserHttpReq);
callback(null); callback(null);
}); }
}
},
//
function(callback){
//listen CONNECT method for https over http
httpProxyServer.on('connect',dealProxyConnectReq);
httpProxyServer.listen(PROXY_PORT);
callback(null);
}],function(err,result){
if(!err){
console.log( (PROXY_TYPE == T_PROXY_HTTP ? "Http" : "Https") + " proxy started at port " + PROXY_PORT);
}else{ }else{
httpProxyServer = https.createServer({ console.log("err when start proxy server :(");
key : fs.readFileSync(keyFile), console.log(err);
cert: fs.readFileSync(crtFile)
},dealProxyUserHttpReq);
callback(null);
} }
}
},
//
function(callback){
//listen CONNECT method for https over http
httpProxyServer.on('connect',dealProxyConnectReq);
httpProxyServer.listen(PROXY_PORT);
callback(null);
}],function(err,result){
if(!err){
console.log( (PROXY_TYPE == T_PROXY_HTTP ? "Http" : "Https") + " proxy started at port " + PROXY_PORT);
}else{
console.log("err when start proxy server :(");
console.log(err);
} }
} );
); }
function dealProxyUserHttpReq(req,res){ function dealProxyUserHttpReq(req,res){
var urlPattern = url.parse(req.url); var urlPattern = url.parse(req.url);