anyproxy/lib/certMgr.js
2014-08-11 16:43:14 +08:00

60 lines
1.9 KiB
JavaScript

var exec = require('child_process').exec,
path = require("path"),
fs = require("fs"),
os = require("os"),
asyncTaskMgr = require("./asyncTaskMgr");
var certDir = path.join(getUserHome(),"/.anyproxy_certs/"),
asyncTaskMgr = new asyncTaskMgr();
if(!fs.existsSync(certDir)){
fs.mkdirSync(certDir);
}
function getCertificate(hostname,cb){
var keyFile = path.join(certDir , "__hostname.key".replace(/__hostname/,hostname) ),
crtFile = path.join(certDir , "__hostname.crt".replace(/__hostname/,hostname) );
if(!fs.existsSync(keyFile) || !fs.existsSync(crtFile)){
asyncTaskMgr.addTask(hostname,function(err){
if(!err){
cb(null , fs.readFileSync(keyFile) , fs.readFileSync(crtFile) );
}else{
cb(err);
}
},function(cb){
createCert(hostname,function(err){
cb(err ? -1 : null);
});
});
}else{
cb(null , fs.readFileSync(keyFile) , fs.readFileSync(crtFile) );
}
}
function getUserHome() {
return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
function createCert(hostname,callback){
console.log("creating cert for :" + hostname);
var cmd = "./gen-cer __host __path".replace(/__host/,hostname).replace(/__path/,certDir);
exec(cmd,{cwd:"./cert/"},function(err,stdout,stderr){
if(err){
callback && callback(new Error("error when generating certificate"),null);
}else{
console.log("certificate created for __HOST".replace(/__HOST/,hostname));
callback(null);
}
});
}
function clearCerts(cb){
exec("rm *.key *.csr *.crt",{cwd : certDir},cb);
}
module.exports.getCertificate = getCertificate;
module.exports.createCert = createCert;
module.exports.clearCerts = clearCerts;