diff --git a/cloudcmd.js b/cloudcmd.js
index 62f84f52..336523f3 100644
--- a/cloudcmd.js
+++ b/cloudcmd.js
@@ -21,8 +21,6 @@
Minify = main.minify,
Config = main.config,
- REQUEST = 'request',
- RESPONSE = 'response',
INDEX = HTMLDIR + 'index.html',
CONFIG_PATH = JSONDIR + 'config.json',
FS = CloudFunc.FS;
@@ -215,7 +213,7 @@
* routing of server queries
*/
function route(pParams){
- var lRet = checkParams(pParams);
+ var lRet = main.checkParams(pParams);
if(lRet){
var p = pParams;
@@ -241,7 +239,7 @@
}
function sendCommanderContent(pParams){
- var lRet = checkParams(pParams);
+ var lRet = main.checkParams(pParams);
if(lRet){
var p = pParams;
p.name = Util.removeStr(p.name, CloudFunc.FS) || main.SLASH;
@@ -262,7 +260,7 @@
}
function processCommanderContent(pParams){
- var lRet = checkParams(pParams);
+ var lRet = main.checkParams(pParams);
if(lRet){
var p = pParams;
main.commander.getDirContent(p.name, function(pError, pJSON){
@@ -281,12 +279,10 @@
lList = '
' +
'';
- p.data = indexProcessing({
+ main.sendResponse(p, indexProcessing({
additional : lList,
data : pData.toString(),
- });
-
- main.sendResponse(p);
+ }));
}
else
main.sendError(pParams, pError);
@@ -299,12 +295,6 @@
}
}
- function checkParams(pParams){
- var lRet = Util.checkObjTrue( pParams, ['name', REQUEST, RESPONSE] );
-
- return lRet;
- }
-
function noJSTMPRedirection(pParams){
var MOVED_PERMANENTLY = 301,
lPath = Util.removeStr(pParams.name, 'no-js/');
diff --git a/lib/server/main.js b/lib/server/main.js
index a0f4aa8e..858f0753 100644
--- a/lib/server/main.js
+++ b/lib/server/main.js
@@ -53,13 +53,17 @@
exports.librequire = librequire,
exports.srvrequire = srvrequire,
exports.rootrequire = rootrequire,
+
exports.generateHeaders = generateHeaders,
exports.getQuery = getQuery,
exports.isGZIP = isGZIP,
+
exports.sendFile = sendFile,
exports.sendResponse = sendResponse,
exports.sendError = sendError,
+ exports.checkParams = checkParams,
+
/* compitability with old versions of node */
exports.fs.exists = exports.fs.exists || exports.path.exists,
@@ -248,9 +252,9 @@
* @param Data - данные
* @param pName - имя отсылаемого файла
*/
- function sendResponse(pParams){
+ function sendResponse(pParams, pData){
var lRet = Util.checkObjTrue(pParams,
- ['name', 'data', 'request', 'response']);
+ ['name', 'request', 'response']);
if(lRet){
var p = pParams;
@@ -282,7 +286,7 @@
},
function(pCallBack){
- zlib.gzip (p.data, Util.call(gzipData, {
+ zlib.gzip (p.data || pData, Util.call(gzipData, {
callback : pCallBack
}));
});
@@ -296,7 +300,7 @@
if(lRet){
var p = pParams;
p.status = FILE_NOT_FOUND;
- p.data = pError.toString();
+ p.data = p.data || pError.toString();
sendResponse(p);
}
}
@@ -307,7 +311,7 @@
* @pName
*/
function gzipData(pParams){
- var lRet = checkParams(pParams);
+ var lRet = checkCallBackParams(pParams);
if(lRet)
lRet = Util.checkObj(pParams.params, ['callback']);
@@ -329,10 +333,18 @@
}
- function checkParams(pParams){
+ function checkCallBackParams(pParams){
return Util.checkObj(pParams, ['error', 'data', 'params']);
}
+ function checkParams(pParams, pAdditional){
+ var lRet = Util.checkObjTrue( pParams, ['name', 'request', 'response'] );
+
+ if(lRet && pAdditional)
+ lRet = Util.checkObjTrue( pParams, pAdditional);
+
+ return lRet;
+ }
function getQuery(pReq){
var lQuery, lParsedUrl;
diff --git a/lib/server/rest.js b/lib/server/rest.js
index 0288f6a2..01185bdf 100644
--- a/lib/server/rest.js
+++ b/lib/server/rest.js
@@ -14,6 +14,7 @@
'# http://coderaiser.github.com/cloudcmd' + '\n');
var main = global.cloudcmd.main,
+ fs = main.fs,
Util = main.util,
CloudFunc = main.cloudfunc,
OK = 200,
@@ -107,42 +108,51 @@
}
function onFS(pParams){
- var lResult,
- lMethod = pParams.method,
- lName = Util.removeStr(pParams.name, CloudFunc.FS) || '/';
-
- switch(lMethod){
- case 'GET':
- lResult = main.commander.getDirContent(lName, function(pError, pData){
- if(!pError){
- pParams.request.url += '.json';
- pParams.name = lName;
- pParams.data = Util.stringifyJSON(pData);
- main.sendResponse(pParams);
- }
- else
- main.sendError(pParams, pError);
- });
-
- break;
-
- case 'PUT':
- var lCmd = 'mkdir ' + lName;
- main.child_process.exec(lCmd, function(pError, pStdout, pStderr){
- var lError = pError || pStderr;
- if(!lError){
- pParams.data = pStdout;
- main.sendResponse(pParams);
- }
- else
- main.sendError(pParams, lError);
- });
-
- lResult = true;
- break;
- }
-
- return lResult;
+ var lRet = main.checkParams(pParams, ['method']);
+ if(lRet){
+ var p = pParams;
+ p.name = Util.removeStr(pParams.name, CloudFunc.FS) || '/';
+
+ switch(p.method){
+ case 'GET':
+ fs.stat(p.name, function(pError, pStat){
+ if(!pError)
+ if( pStat.isDirectory() )
+ main.commander.getDirContent(pParams.name, function(pError, pData){
+ if(!pError){
+ pParams.request.url += '.json';
+ pParams.data = Util.stringifyJSON(pData);
+ main.sendResponse(pParams);
+ }
+ else
+ main.sendError(pParams, pError);
+ });
+ else
+ main.sendFile(pParams);
+ else
+ main.sendError(pParams, pError);
+
+ });
+
+ break;
+
+ case 'PUT':
+ var lCmd = 'mkdir ' + p.Name;
+ main.child_process.exec(lCmd, function(pError, pStdout, pStderr){
+ var lError = pError || pStderr;
+ if(!lError){
+ pParams.data = pStdout;
+ main.sendResponse(pParams);
+ }
+ else
+ main.sendError(pParams, lError);
+ });
+
+ lRet = true;
+ break;
+ }
+ }
+ return lRet;
}
/**