diff --git a/ChangeLog b/ChangeLog index e61e47e9..6b679ec2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -41,6 +41,8 @@ writed root directory. * Changed the way file table building. From now templating used. +* Changed sync reading of certs to async. + 2012.03.01, Version 0.1.9 diff --git a/cloudcmd.js b/cloudcmd.js index 33fa7ae4..722ba0b8 100644 --- a/cloudcmd.js +++ b/cloudcmd.js @@ -28,7 +28,7 @@ /* reinit main dir os if we on * Win32 should be backslashes */ DIR = main.DIR; - + readConfig(init); @@ -181,14 +181,27 @@ route : route }; - if(Config.ssl) - lParams.ssl = { - ca : fs.readFileSync(DIR + 'ssl/sub.class1.server.ca.pem'), - key : fs.readFileSync(DIR + 'ssl/ssl.key'), - cert : fs.readFileSync(DIR + 'ssl/ssl.crt') - }; - - server.start(lParams); + if(Config.ssl){ + var CA = DIR + 'ssl/sub.class1.server.ca.pem', + KEY = DIR + 'ssl/ssl.key', + CERT = DIR + 'ssl/ssl.crt'; + + readFiles([ CA, KEY, CERT ], function(pErrors, pFiles){ + if(pErrors) + Util.log(pErrors); + else{ + lParams.ssl = { + ca : pFiles[CA], + key : pFiles[KEY], + cert : pFiles[CERT] + }; + + server.start(lParams); + } + }); + } + else + server.start(lParams); } else Util.log('read error: config.json'); @@ -308,6 +321,46 @@ } } + function readFiles(pFiles, pCallBack){ + var lDone = [], + lFiles, + lErrors, + lReadedFiles = {}, + lDoneFunc = function (pParams){ + var lRet = Util.checkObj(pParams, ['error', 'data', 'params']); + + if(lRet){ + lDone.pop(); + var p = pParams, + lName = p.params; + + if(p.error){ + if(!lErrors) lErrors = {}; + + lErrors[lName] = p.error; + } + else + lReadedFiles[lName] = p.data; + + if( !lDone.length ) + Util.exec(pCallBack, lErrors, lReadedFiles); + } + }; + + if( Util.isArray(pFiles) ) + lFiles = pFiles; + else + lFiles = [pFiles]; + + for(var i = 0, n = lFiles.length; i < n; i++){ + var lName = lFiles.pop(); + lDone.push(lName); + + fs.readFile(lName, Util.call( lDoneFunc, lName )); + } + + } + /* function sets stdout to file log.txt */ function writeLogsToFile(){ diff --git a/lib/client/dom.js b/lib/client/dom.js index 063b5b1a..9f112aab 100644 --- a/lib/client/dom.js +++ b/lib/client/dom.js @@ -536,12 +536,12 @@ var CloudCommander, Util, */ DOM.anyLoadInParallel = function(pParams_a, pFunc){ var lRet = this, - done = [], + lDone = [], - doneFunc = function (pCallBack){ + lDoneFunc = function (pCallBack){ Util.exec(pCallBack); - if( !done.pop() ) + if( !lDone.pop() ) Util.exec(pFunc); }; @@ -553,13 +553,13 @@ var CloudCommander, Util, var lParam = pParams_a.pop(); if(lParam){ - done.push(i); + lDone.push(i); if(Util.isString(lParam) ) lParam = { src : lParam }; var lFunc = lParam.func; - lParam.func = Util.retExec(doneFunc, lFunc); + lParam.func = Util.retExec(lDoneFunc, lFunc); DOM.anyload(lParam); } diff --git a/lib/cloudfunc.js b/lib/cloudfunc.js index 2552bd08..2b3d786d 100644 --- a/lib/cloudfunc.js +++ b/lib/cloudfunc.js @@ -372,45 +372,57 @@ var CloudFunc, exports, Util; } for(var i = 1, n = files.length; i < n; i++){ - var lFile = files[i]; + var lFile = files[i], + lOwner = !lFile.uid ? 'root' : lFile.uid, + lMode = CloudFunc.getSymbolicPermissions(lFile.mode), + lType, lSize; + + if(lFile.size === 'dir'){ + lType = 'directory', + lSize = '<dir>'; + }else{ + lType = 'text-file'; + lSize = CloudFunc.getShortSize( lFile.size ); + } - lFileTable += '