From b9eab52f8b1114f7433e7a15e71a57d714c367a1 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 22 Jun 2015 02:34:34 -0400 Subject: [PATCH] feature(validate) add --- bin/cloudcmd.js | 44 ++++------------------------------ lib/cloudcmd.js | 54 +++++++++++++++++++----------------------- lib/server.js | 46 ++++++++++++++++------------------- lib/server/validate.js | 31 ++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 93 deletions(-) create mode 100644 lib/server/validate.js diff --git a/bin/cloudcmd.js b/bin/cloudcmd.js index 287c4992..2b8bd7e6 100755 --- a/bin/cloudcmd.js +++ b/bin/cloudcmd.js @@ -10,7 +10,6 @@ exit = require(DIR_SERVER + 'exit'), config = require(DIR_SERVER + 'config'), - createPass = require(DIR_SERVER + 'password'), argv = process.argv, @@ -70,22 +69,23 @@ checkUpdate(); port(args.port); - password(args.password); config('auth', args.auth); config('online', args.online); config('minify', args.minify); config('username', args.username); config('progressOfCopying', args['progress-of-copying']); - root(args.root); - editor(args.editor); readConfig(args.config); if (args.save) config.save(start); else - start(); + start({ + root: args.root, + editor: args.editor, + password: args.password, + }); } function version() { @@ -99,17 +99,6 @@ require(SERVER)(config); } - function password(pass) { - var algo, hash; - - if (pass) { - algo = config('algo'); - hash = createPass(algo, pass); - - config('password', hash); - } - } - function port(arg) { var number = parseInt(arg, 10); @@ -154,29 +143,6 @@ console.log('\nGeneral help using Cloud Commander: <%s>', url); } - function root(dir) { - var fs; - - config('root', dir); - - if (dir !== '/') { - fs = require('fs'); - fs.stat(dir, function(error) { - if (error) - exit('cloudcmd --root: %s', error.message); - else - console.log('root:', dir); - }); - } - } - - function editor(name) { - var reg = /^(dword|edward)$/; - - if (!reg.test(name)) - exit('cloudcmd --editor: could be "dword" or "edward" only'); - } - function repl() { console.log('REPL mode enabled (telnet localhost 1337)'); require(DIR_LIB + '/server/repl'); diff --git a/lib/cloudcmd.js b/lib/cloudcmd.js index a0e181a8..8004d92a 100644 --- a/lib/cloudcmd.js +++ b/lib/cloudcmd.js @@ -12,6 +12,8 @@ config = require(DIR_SERVER + 'config'), rest = require(DIR_SERVER + 'rest'), route = require(DIR_SERVER + 'route'), + validate = require(DIR_SERVER + 'validate'), + createPass = require(DIR_SERVER + 'password'), join = require('join-io'), ponse = require('ponse'), @@ -35,34 +37,36 @@ }, module.exports = function(params) { - var keys, - p = params || {}, - prefix = p.prefix || ''; + var p = params || {}, + options = p.config || {}, + prefix = p.prefix || '', + keys = Object.keys(options); - if (params) { - keys = Object.keys(params); + keys.forEach(function(name) { + var value = options[name]; - keys.forEach(function(name) { - config(name, params[name]); - }); - } + switch(name) { + case 'root': + validate.root(value); + break; + case 'editor': + validate.editor(value); + break; + case 'password': + value = createPass(config('algo'), value); + break; + } + + config(name, value); + }); if (p.socket) - module.exports.listen(p.socket); + listen(p.socket); return cloudcmd(prefix); }; - module.exports.middle = function(params) { - var p = params || {}, - prefix = p.prefix || '/cloudcmd', - funcs = cloudcmd(), - middle = respond.bind(null, prefix, funcs); - - return middle; - }; - - module.exports.listen = function(socket) { + function listen(socket) { var size = cloudfunc.MAX_SIZE; Util.check(arguments, ['socket']); @@ -86,7 +90,7 @@ spero.listen(socket, { root: root }); - }; + } function cloudcmd(prefix) { var isOption = function(name) { @@ -178,12 +182,4 @@ next(); }; } - - function respond(prefix, funcs, req, res) { - funcs = funcs.map(function(func) { - return Util.exec.with(func, req, res); - }); - - Util.exec.series(funcs); - } })(); diff --git a/lib/server.js b/lib/server.js index 0dc31ef6..8f5a135c 100644 --- a/lib/server.js +++ b/lib/server.js @@ -6,7 +6,7 @@ http = require('http'), - middleware = require(DIR_LIB + 'cloudcmd'), + cloudcmd = require(DIR_LIB + 'cloudcmd'), exit = require(DIR_SERVER + 'exit'), config = require(DIR_SERVER + 'config'), express = require(DIR_SERVER + 'express'), @@ -17,37 +17,33 @@ * */ module.exports = function(options) { - var server, app, socket, + var server, + + port = process.env.PORT || /* c9 */ + process.env.VCAP_APP_PORT || /* cloudfoundry */ + config('port'), + + ip = process.env.IP || /* c9 */ + config('ip') || + '0.0.0.0', + + app = express.getApp({ + auth : config('auth'), + username: config('username'), + password: config('password') + }); - middle = middleware(options), + server = http.createServer(app); - port = process.env.PORT || /* c9 */ - process.env.VCAP_APP_PORT || /* cloudfoundry */ - config('port'), - - ip = process.env.IP || /* c9 */ - config('ip') || - '0.0.0.0', - - expressApp = express.getApp(middle, { - auth : config('auth'), - username: config('username'), - password: config('password') - }); - - if (expressApp) - app = expressApp; - else - app = middle; - - server = http.createServer(app); - socket = io.listen(server); + app.use(cloudcmd({ + config: options, + socket: io.listen(server) + })); server.on('error', function(error) { exit('cloudcmd --port: %s', error.message); }); - middleware.listen(socket); server.listen(port, ip); console.log('url: http://%s:%d', config('ip') || 'localhost', port); diff --git a/lib/server/validate.js b/lib/server/validate.js new file mode 100644 index 00000000..5466267c --- /dev/null +++ b/lib/server/validate.js @@ -0,0 +1,31 @@ +(function() { + 'use strict'; + + var DIR = './', + exit = require(DIR + 'exit'); + + module.exports.root = root; + module.exports.editor = editor; + + function root(dir) { + var fs; + + if (dir !== '/') { + fs = require('fs'); + fs.stat(dir, function(error) { + if (error) + exit('cloudcmd --root: %s', error.message); + else + console.log('root:', dir); + }); + } + } + + function editor(name) { + var reg = /^(dword|edward)$/; + + if (!reg.test(name)) + exit('cloudcmd --editor: could be "dword" or "edward" only'); + } + +})();