(function() { 'use strict'; var DIR = __dirname + '/', DIR_LIB = DIR + 'lib/', DIR_SERVER = DIR + 'lib/server/', fs = require('fs'), win = require(DIR_SERVER + 'win'), main = require(DIR_SERVER + 'main'), format = require(DIR_SERVER + 'format'), mellow = require(DIR_SERVER + 'mellow'), ponse = require(DIR_SERVER + 'ponse'), files = require(DIR_SERVER + 'files'), AppCache = require(DIR_SERVER + 'appcache'), update = require(DIR_SERVER + 'update'), Minify = require(DIR_SERVER + 'minify'), HTMLDIR = main.HTMLDIR, Util = require(DIR_LIB + 'util'), CloudFunc = require(DIR_LIB + 'cloudfunc'), server = require(DIR_LIB + 'server'), Config = main.config, KEY = DIR + 'ssl/ssl.key', CERT = DIR + 'ssl/ssl.crt', HTML_FS_DIR = HTMLDIR + 'fs/', PATH_INDEX = HTML_FS_DIR + 'index.html', TMPL_PATH = [ 'file', 'panel', 'path', 'pathLink', 'link', ], Template = {}, FS = CloudFunc.FS; /* reinit main dir os if we on Win32 should be backslashes */ DIR = main.DIR; exports.start = function(params) { readConfig(function(msg, config) { var keys; Util.log(msg); if (!config) config = {}; if (params) { keys = Object.keys(params); keys.forEach(function(item) { config[item] = params[item]; }); } init(config); }); win.prepareCodePage(); }; /** * additional processing of index file */ function indexProcessing(options) { var keysPanel, left, right, LEFT = CloudFunc.PANEL_LEFT, RIGHT = CloudFunc.PANEL_RIGHT, data = options.data, panel = options.panel; if (!Config.appCache) data = Util.rmStr(data, [ /* min */ ' manifest=/cloudcmd.appcache', /* normal */ ' manifest="/cloudcmd.appcache"' ]); if (!Config.showKeysPanel) { keysPanel = '
' + name); p.name = main.HTMLDIR + name + '.html'; ponse.sendFile(p); } else if (isFS) { name = Util.rmStrOnce(name, CloudFunc.FS) || main.SLASH; path = mellow.convertPath(name); mellow.read(path, function(error, dir) { if (dir) dir.path = format.addSlashToEnd(name); if (error) if (error.code === 'ENOTDIR') { p.name = path; ponse.sendFile(p); } else { ponse.sendError(error, p); } else buildIndex(dir, function(error, data) { var NOT_LOG = true; p.name = PATH_INDEX; if (error) ponse.sendError(error, p); else ponse.send(data, p, NOT_LOG); }); }); } } } function buildIndex(json, callback) { var isMinify = Minify && Config.minify; Util.exec.if(!isMinify, function(error, name) { fs.readFile(name || PATH_INDEX, 'utf8', function(error, template) { var panel, data; if (!error) { panel = CloudFunc.buildFromJSON({ data : json, template : Template }), data = indexProcessing({ panel : panel, data : template, }); } Util.exec(callback, error, data); }); }, function(callback) { Minify.optimize(PATH_INDEX, { returnName : true }, callback); }); } function readConfig(callback) { var path = DIR + 'json/config.json'; Util.checkArgs(arguments, ['callback']); fs.readFile(path, 'utf8', function(error, data) { var status, config, msg; if (error) { status = 'error'; } else { status = 'ok'; config = Util.parseJSON(data); } msg = CloudFunc.formatMsg('read', 'config', status); callback(msg, config); }); } /* function sets stdout to file log.txt */ function writeLogsToFile() { var stdout = process.stdout, writeFile = fs.createWriteStream('log.txt'), write = writeFile.write.bind(writeFile); stdout.write = write; } })();