mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-07-20 01:47:35 +00:00
refactored
This commit is contained in:
parent
a0f0d08b53
commit
43bd558f4a
4 changed files with 272 additions and 237 deletions
12
cloudcmd.js
12
cloudcmd.js
|
|
@ -196,7 +196,17 @@
|
|||
main.sendFile(pParams);
|
||||
|
||||
lRet = true;
|
||||
}
|
||||
}else if( Util.isContainStr(lName, [CloudFunc.Fs, CloudFunc.NoJS] ) &&
|
||||
Util.strCmp(lName, '/') &&
|
||||
Util.strCmp(lName, 'json') ) {
|
||||
main.commander({
|
||||
request : pParams.request,
|
||||
response : pParams.response,
|
||||
indexProcessing : indexProcessing
|
||||
});
|
||||
|
||||
lRet = true;
|
||||
}
|
||||
|
||||
return lRet;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,27 +25,147 @@
|
|||
|
||||
NO_JS = CloudFunc.NoJS,
|
||||
FS = CloudFunc.Fs,
|
||||
INDEX = HTMLDIR + 'index.html';
|
||||
|
||||
|
||||
exports.sendContent = function(pParams){
|
||||
var lRet,
|
||||
lReq, lRes;
|
||||
INDEX = HTMLDIR + 'index.html',
|
||||
|
||||
if(pParams){
|
||||
lReq = pParams.request,
|
||||
lRes = pParams.response;
|
||||
IndexProcessingFunc = null;
|
||||
|
||||
function getQuery(pReq){
|
||||
var lQuery, lParsedUrl;
|
||||
|
||||
if(pReq){
|
||||
lParsedUrl = url.parse(pReq.url);
|
||||
lQuery = lParsedUrl.query;
|
||||
}
|
||||
|
||||
if(lReq && lRes){
|
||||
var lPath = getCleanPath(lReq);
|
||||
return lQuery;
|
||||
}
|
||||
|
||||
function getPath(pReq){
|
||||
var lParsedUrl = url.parse(pReq.url),
|
||||
lPath = lParsedUrl.pathname;
|
||||
|
||||
return lPath;
|
||||
}
|
||||
|
||||
function getDirPath(pReq){
|
||||
var lPath = getPath(pReq);
|
||||
|
||||
/* Если мы не в корне добавляем слеш к будующим ссылкам */
|
||||
if(lPath !== '/')
|
||||
lPath += '/';
|
||||
|
||||
return lPath;
|
||||
}
|
||||
|
||||
function getCleanPath(pReq){
|
||||
var lPath = getPath(pReq),
|
||||
lRet = Util.removeStr(lPath, [NO_JS, FS]) || '/';
|
||||
|
||||
return lRet;
|
||||
}
|
||||
|
||||
function call(pFunc, pParams){
|
||||
var lFunc = function(pError, pData){
|
||||
Util.exec(pFunc, {
|
||||
error : pError,
|
||||
data : pData,
|
||||
params : pParams
|
||||
});
|
||||
};
|
||||
|
||||
return lFunc;
|
||||
}
|
||||
|
||||
function noJS(pReq){
|
||||
var lNoJS, lPath;
|
||||
|
||||
if(pReq){
|
||||
lPath = getPath(pReq);
|
||||
|
||||
lNoJS = Util.isContainStr(lPath, CloudFunc.NoJS)
|
||||
&& lPath === '/' && getQuery() !== 'json';
|
||||
}
|
||||
|
||||
return lNoJS;
|
||||
}
|
||||
|
||||
function isGZIP(pReq){
|
||||
var lEnc, lGZIP;
|
||||
if(pReq){
|
||||
lEnc = pReq.headers['accept-encoding'] || '',
|
||||
lGZIP = lEnc.match(/\bgzip\b/);
|
||||
}
|
||||
|
||||
return lGZIP;
|
||||
}
|
||||
|
||||
/**
|
||||
* Функция высылает ответ серверу
|
||||
* @param pHead - заголовок
|
||||
* @param Data - данные
|
||||
* @param pName - имя отсылаемого файла
|
||||
*/
|
||||
function sendResponse(pParams){
|
||||
var lRet = Util.checkObjTrue(pParams,
|
||||
['name', 'data', 'request', 'response']);
|
||||
|
||||
if(lRet){
|
||||
var p = pParams;
|
||||
|
||||
var lPath = p.name || getCleanPath(p.request),
|
||||
lQuery = getQuery(p.request),
|
||||
/* download, json */
|
||||
lGzip = isGZIP(p.request),
|
||||
lHead = main.generateHeaders(lPath, lGzip, lQuery);
|
||||
|
||||
/* если браузер поддерживает gzip-сжатие - сжимаем данные*/
|
||||
Util.ifExec(!lGzip,
|
||||
function(pParams){
|
||||
var lRet = Util.checkObj(pParams, ['status', 'data']);
|
||||
|
||||
if(lRet){
|
||||
p.status = pParams.status;
|
||||
p.data = pParams.data;
|
||||
}
|
||||
|
||||
p.response.writeHead(p.status || OK, lHead);
|
||||
p.request.end();
|
||||
|
||||
Util.log(lPath + ' sended');
|
||||
Util.log( p.status === NOT_FOUND && p.data );
|
||||
},
|
||||
|
||||
function(pCallBack){
|
||||
zlib.gzip (call(gzipData, {
|
||||
callback : pCallBack,
|
||||
data : p.data
|
||||
}));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
exports.sendContent = function(pParams){
|
||||
var lRet = Util.checkObj(pParams,
|
||||
['processing'],
|
||||
['request', 'response']);
|
||||
|
||||
if(lRet){
|
||||
var lReq = pParams.request,
|
||||
lRes = pParams.response,
|
||||
lPath = getCleanPath(lReq);
|
||||
|
||||
IndexProcessingFunc = pParams.processing;
|
||||
|
||||
fs.stat(lPath, function(pError, pStat){
|
||||
if(!pError)
|
||||
if(pStat.isDirectory())
|
||||
fs.readdir(lPath, call(readDir, pParams) );
|
||||
else
|
||||
fs.readFile(lPath, getReadFileFunc(lPath));
|
||||
main.sendFile({
|
||||
name : lPath,
|
||||
request : lReq,
|
||||
response : lRes
|
||||
});
|
||||
else
|
||||
sendResponse({
|
||||
status : NOT_FOUND,
|
||||
|
|
@ -147,7 +267,7 @@
|
|||
};
|
||||
|
||||
Util.exec(lCallBack);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Function fill JSON by file stats
|
||||
|
|
@ -182,7 +302,7 @@
|
|||
size : 'dir'
|
||||
};
|
||||
|
||||
for( i = 0; i < n; i++){
|
||||
for( i = 0; i < n; i++ ){
|
||||
/*
|
||||
*Переводим права доступа в 8-ричную систему
|
||||
*/
|
||||
|
|
@ -212,7 +332,12 @@
|
|||
lList = '<ul id=left class=panel>' + lPanel + '</ul>' +
|
||||
'<ul id=right class=panel>' + lPanel + '</ul>';
|
||||
|
||||
fs.readFile(INDEX, indexReaded(lList));
|
||||
fs.readFile(INDEX, call(readFile, {
|
||||
list : lList,
|
||||
request : lReq,
|
||||
response : lRes
|
||||
})
|
||||
);
|
||||
|
||||
}else{
|
||||
lDirPath = lDirPath.substr(lDirPath, lDirPath.lastIndexOf('/') );
|
||||
|
|
@ -222,99 +347,61 @@
|
|||
* с соответствующими заголовками
|
||||
*/
|
||||
lList = JSON.stringify(lJSON);
|
||||
|
||||
/* если браузер поддерживает gzip-сжатие - сжимаем данные*/
|
||||
if( isGZIP(lReq) ){
|
||||
zlib.gzip(lList, call(lGzipCB, {
|
||||
|
||||
}));
|
||||
}
|
||||
/* если не поддерживаеться - отсылаем данные без сжатия*/
|
||||
else
|
||||
sendResponse({
|
||||
name : INDEX,
|
||||
data : lList,
|
||||
request : lReq,
|
||||
response: lRes
|
||||
});
|
||||
|
||||
sendResponse({
|
||||
name : INDEX,
|
||||
data : lList,
|
||||
request : lReq,
|
||||
response: lRes
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*@param pList
|
||||
*/
|
||||
function indexReaded(pList){
|
||||
return function(pError, pIndex){
|
||||
if(pError){
|
||||
return Util.log(pError);
|
||||
}
|
||||
|
||||
pIndex = pIndex.toString();
|
||||
|
||||
|
||||
var lProccessed = Util.exec(lIndexProccessing, {
|
||||
data : pIndex,
|
||||
additional : pList
|
||||
});
|
||||
|
||||
if(lProccessed)
|
||||
pIndex = lProccessed;
|
||||
|
||||
/* если браузер поддерживает gzip-сжатие - сжимаем данные*/
|
||||
if (isGZIP(lReq) ) {
|
||||
zlib.gzip(pIndex,
|
||||
call (gzipData, {
|
||||
request : lReq,
|
||||
response: lRes
|
||||
}));
|
||||
}
|
||||
|
||||
/* если не поддерживаеться - отсылаем данные без сжатия*/
|
||||
else
|
||||
sendResponse({
|
||||
name : INDEX,
|
||||
data : pIndex,
|
||||
request : lReq,
|
||||
response: lRes
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Функция генерирует функцию считывания файла
|
||||
* таким образом, что бы у нас было
|
||||
* таким образом, что бы у нас было
|
||||
* имя считываемого файла
|
||||
* @param pName - полное имя файла
|
||||
*/
|
||||
function getReadFileFunc(pName){
|
||||
var lReadFile = function(pError, pData){
|
||||
if (!pError){
|
||||
Util.log('file ' + pName + ' readed');
|
||||
function readFile(pParams){
|
||||
var lRet = Util.checkObj(pParams,
|
||||
['error', 'data']);
|
||||
|
||||
if(lRet)
|
||||
lRet = Util.checkObj(pParams.params,
|
||||
['callback'], ['request', 'response', 'name', 'list']);
|
||||
|
||||
if(lRet){
|
||||
var p = pParams,
|
||||
c = pParams.params,
|
||||
lParams = {
|
||||
request : c.request,
|
||||
response: c.response
|
||||
},
|
||||
|
||||
|
||||
/* если браузер поддерживает gzip-сжатие - сжимаем данные*/
|
||||
if( isGZIP(lReq) )
|
||||
zlib.gzip(pData, call(gzipData, lParams));
|
||||
else
|
||||
sendResponse({
|
||||
name : pName,
|
||||
data : pData,
|
||||
request : lReq,
|
||||
response: lRes
|
||||
});
|
||||
}
|
||||
else
|
||||
sendResponse({
|
||||
name : pName,
|
||||
status : NOT_FOUND,
|
||||
data : pError.toString(),
|
||||
request : lReq,
|
||||
response: lRes
|
||||
lProccessed = Util.exec(IndexProcessingFunc, {
|
||||
data : p.data,
|
||||
additional : c.list
|
||||
});
|
||||
|
||||
return lReadFile;
|
||||
};
|
||||
if(lProccessed)
|
||||
p.data = lProccessed;
|
||||
|
||||
if (!p.Error){
|
||||
lParams.name = c.Name;
|
||||
lParams.data = p.data;
|
||||
|
||||
Util.log('file ' + c.name + ' readed');
|
||||
}
|
||||
else{
|
||||
lParams.status = NOT_FOUND;
|
||||
lParams.data = p.error.toString();
|
||||
}
|
||||
|
||||
sendResponse(lParams);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -323,150 +410,29 @@
|
|||
* @pName
|
||||
*/
|
||||
function gzipData(pParams){
|
||||
var lError, lResult,
|
||||
lSendData, lData, lName, lReq, lRes;
|
||||
var lRet = Util.checkObj(pParams,
|
||||
['error', 'data']);
|
||||
|
||||
if(pParams){
|
||||
lError = pParams.error;
|
||||
lResult = pParams.data;
|
||||
if(lRet)
|
||||
lRet = Util.checkObj(pParams.params,
|
||||
['callback'], ['name']);
|
||||
|
||||
if(lRet){
|
||||
var p = pParams,
|
||||
c = pParams.params,
|
||||
lData = {};
|
||||
|
||||
lData = pParams.params;
|
||||
|
||||
if(lData){
|
||||
lReq = lSendData.request,
|
||||
lRes = lSendData.response;
|
||||
lName = lSendData.name;
|
||||
if(!p.error){
|
||||
lData.name = c.name;
|
||||
lData.data = p.data;
|
||||
}
|
||||
else{
|
||||
lData.status = NOT_FOUND,
|
||||
lData.data = p.error.toString(),
|
||||
}
|
||||
}
|
||||
|
||||
lSendData = {
|
||||
request : lReq,
|
||||
response: lRes
|
||||
};
|
||||
|
||||
if(!lError){
|
||||
lSendData.name = lName;
|
||||
lSendData.data = lResult;
|
||||
Util.exec(c.callback, lData);
|
||||
}
|
||||
else{
|
||||
lSendData.status = NOT_FOUND,
|
||||
lSendData.data = lError.toString(),
|
||||
}
|
||||
|
||||
sendResponse(lSendData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Функция высылает ответ серверу
|
||||
* @param pHead - заголовок
|
||||
* @param Data - данные
|
||||
* @param pName - имя отсылаемого файла
|
||||
*/
|
||||
function sendResponse(pParams){
|
||||
var lName, lData, lReq, lRes, lStatus;
|
||||
|
||||
if(pParams){
|
||||
lName = pParams.name;
|
||||
lData = pParams.data;
|
||||
lReq = pParams.request,
|
||||
lRes = pParams.response;
|
||||
lStatus = pParams.status || OK;
|
||||
}
|
||||
|
||||
if(lStatus === NOT_FOUND)
|
||||
Util.log(lData);
|
||||
|
||||
if(lRes && lReq){
|
||||
/* varible contain one of queris:
|
||||
* download - change content-type for
|
||||
* make downloading process
|
||||
* from client js
|
||||
* json - /no-js/ will be removed, and
|
||||
* if we will wont get directory
|
||||
* content wi will set json
|
||||
* query like this
|
||||
* ?json
|
||||
*/
|
||||
var lPath = lName || getCleanPath(lReq),
|
||||
lQuery = getQuery(lReq),
|
||||
lGzip = isGZIP(lReq),
|
||||
lHead = main.generateHeaders(lPath, lGzip, lQuery);
|
||||
|
||||
lRes.writeHead(lStatus, lHead);
|
||||
lRes.end(lData);
|
||||
|
||||
Util.log(lPath + ' sended');
|
||||
}
|
||||
}
|
||||
|
||||
function getQuery(pReq){
|
||||
var lQuery, lParsedUrl;
|
||||
|
||||
if(pReq){
|
||||
lParsedUrl = url.parse(pReq.url);
|
||||
lQuery = lParsedUrl.query;
|
||||
}
|
||||
|
||||
return lQuery;
|
||||
}
|
||||
|
||||
function getPath(pReq){
|
||||
var lParsedUrl = url.parse(pReq.url),
|
||||
lPath = lParsedUrl.pathname;
|
||||
|
||||
return lPath;
|
||||
}
|
||||
|
||||
function getDirPath(pReq){
|
||||
var lPath = getPath(pReq);
|
||||
|
||||
/* Если мы не в корне добавляем слеш к будующим ссылкам */
|
||||
if(lPath !== '/')
|
||||
lPath += '/';
|
||||
|
||||
return lPath;
|
||||
}
|
||||
|
||||
function getCleanPath(pReq){
|
||||
var lPath = getPath(pReq),
|
||||
lRet = Util.removeStr(lPath, [NO_JS, FS]) || '/';
|
||||
|
||||
return lRet;
|
||||
}
|
||||
|
||||
function call(pFunc, pParams){
|
||||
var lFunc = function(pError, pData){
|
||||
Util.exec(pFunc, {
|
||||
error : pError,
|
||||
data : pData,
|
||||
params : pParams
|
||||
});
|
||||
};
|
||||
|
||||
return lFunc;
|
||||
}
|
||||
|
||||
function noJS(pReq){
|
||||
var lNoJS, lPath;
|
||||
|
||||
if(pReq){
|
||||
lPath = getPath(pReq);
|
||||
|
||||
lNoJS = Util.isContainStr(lPath, CloudFunc.NoJS)
|
||||
&& lPath === '/' && getQuery() !== 'json';
|
||||
}
|
||||
|
||||
return lNoJS;
|
||||
}
|
||||
|
||||
function isGZIP(pReq){
|
||||
var lEnc, lGZIP;
|
||||
if(pReq){
|
||||
lEnc = pReq.headers['accept-encoding'] || '',
|
||||
lGZIP = lEnc.match(/\bgzip\b/);
|
||||
}
|
||||
|
||||
return lGZIP;
|
||||
}
|
||||
|
||||
})();
|
||||
|
|
@ -86,6 +86,7 @@
|
|||
exports.update = srvrequire('update'),
|
||||
exports.ischanged = srvrequire('ischanged');
|
||||
exports.minify = srvrequire('minify').Minify;
|
||||
exports.commander = srvrequire('commander');
|
||||
/*
|
||||
* second initializing after all modules load, so global var is
|
||||
* totally filled of all information that should know all modules
|
||||
|
|
|
|||
62
lib/util.js
62
lib/util.js
|
|
@ -39,7 +39,7 @@ Util = exports || {};
|
|||
* @param pName - получает имя файла
|
||||
* @param pExt - расширение
|
||||
*/
|
||||
Util.checkExtension = function(pName, pExt){
|
||||
Util.checkExtension = function(pName, pExt){
|
||||
var lRet = false,
|
||||
lLength = pName.length; /* длина имени*/
|
||||
/* если длина имени больше
|
||||
|
|
@ -65,7 +65,65 @@ Util = exports || {};
|
|||
return lRet;
|
||||
};
|
||||
|
||||
/** for function
|
||||
|
||||
/**
|
||||
* Check is Properties exists and they are true if neaded
|
||||
*
|
||||
* @param pObj
|
||||
* @param pPropArr
|
||||
* @param pTrueArr
|
||||
*/
|
||||
Util.checkObj = function(pObj, pPropArr, pTrueArr){
|
||||
var lRet = Util.isObject(pObj),
|
||||
i, n;
|
||||
if( lRet ){
|
||||
lRet = Util.isArray(pPropArr);
|
||||
if(lRet){
|
||||
n = pPropArr.length;
|
||||
for(i = 0; i < n; i++){
|
||||
var lProp = pPropArr[i];
|
||||
lRet = pObj.hasOwnProperty( lProp );
|
||||
if(!lRet){
|
||||
Util.logError(lProp + ' not in Obj!');
|
||||
Util.log(pObj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( lRet && Util.isArray(pTrueArr) )
|
||||
lRet = Util.checkObjTrue( pObj, pTrueArr );
|
||||
}
|
||||
|
||||
return lRet;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check is Properties exists and they are true
|
||||
*
|
||||
* @param pObj
|
||||
* @param pPropArr
|
||||
* @param pTrueArr
|
||||
*/
|
||||
Util.checkObjTrue = function(pObj, pTrueArr){
|
||||
var lRet = Util.isObject(pObj),
|
||||
i, n;
|
||||
if( lRet ){
|
||||
lRet = Util.isArray(pTrueArr);
|
||||
if(lRet){
|
||||
n = pTrueArr.length;
|
||||
for(i = 0; i < n; i++){
|
||||
lRet = pObj[pTrueArr];
|
||||
if( !lRet)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return lRet;
|
||||
};
|
||||
|
||||
/** for function
|
||||
* @param pI
|
||||
* @param pN
|
||||
* @param pFunc
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue