diff --git a/lib/server.js b/lib/server.js index 2115863d..e73c07aa 100644 --- a/lib/server.js +++ b/lib/server.js @@ -53,10 +53,9 @@ */ function start(options) { var redirectServer, port, ip, ssl, sslPort, - sockets, httpServer, serverLog, - HTTP = 'http://', - HTTPS = 'https://', - config = main.config; + HTTP = 'http://', + HTTPS = 'https://', + config = main.config; if (!options) options = {}; @@ -75,84 +74,98 @@ (main.WIN32 ? '127.0.0.1' : '0.0.0.0'), ssl = options.ssl, - sslPort = config.sslPort, + sslPort = config.sslPort; - sockets = function(pServer) { - var listen, msg, - status = 'off'; - - if (config.socket && Socket) { - listen = Socket.listen(pServer); - - if (listen) { - status = 'on'; - Console.init(); - Terminal.init(); - } - } - - msg = CloudFunc.formatMsg('sockets', '', status); - - Util.log(msg); - }, - - httpServer = function() { - expressApp = express.getApp([ - Rest, - Route, - join, - controller - ]); - - Server = http.createServer(expressApp || respond); - - Server.on('error', Util.log.bind(Util)); - Server.listen(port, ip); - serverLog(HTTP, port); - sockets(Server); - }, - - serverLog = function(http, port) { - Util.log('* Server running at ' + http + ip + ':' + port); - }; /* server mode or testing mode */ - if (config.server) - if (ssl) { - Util.log('* Redirection http -> https is setted up'); - serverLog(HTTP, port); + if (!config.server) + Util.log('Cloud Commander testing mode'); + else + if (!ssl) + createServer(port, ip, HTTP); + else { + createRedirect(port, ip, HTTPS); - redirectServer = http.createServer(function(req, res) { - var url, - host = req.headers.host, - parsed = URL.parse(host), - hostName = parsed.protocol; - - url = HTTPS + hostName + sslPort + req.url; - - main.redirect({ - response: res, - url: url - }); - }); - - redirectServer.listen(port, ip); - - Server = https.createServer(ssl, respond); - Server.on('error', function (error) { - Util.log(error, '\nCould not use https port: ' + sslPort); + createServer(sslPort, ip, HTTP, ssl, function() { + Util.log('Could not use https port: ' + sslPort); redirectServer.close(); Util.log('* Redirection http -> https removed'); - httpServer(); + createServer(port, ip); }); - - sockets(Server); - - Server.listen(sslPort, ip); - serverLog(HTTPS, sslPort); - } else - httpServer(); + } + } + + function createRedirect(port, ip, protocol) { + var server = function(req, res) { + var url, + host = req.headers.host, + parsed = URL.parse(host), + hostName = parsed.protocol; + + url = protocol + hostName + sslPort + req.url; + + main.redirect({ + response: res, + url: url + }); + }; + + Util.log('* Redirection http -> https is setted up'); + logServer(port, ip, http); + + http.createServer(server) + .listen(port, ip); + } + + function createServer(port, ip, protocol, ssl, callback) { + var server, app; + + expressApp = express.getApp([ + Rest, + Route, + join, + controller + ]); + + app = expressApp || respond; + + if (ssl) + server = https.createServer(ssl, app); else - Util.log('Cloud Commander testing mode'); + server = http.createServer(app); + + server.on('error', function(error) { + Util.log(error); + Util.exec(callback, error); + }); + + server.listen(port, ip); + + logServer(port, ip, protocol); + addSockets(server); + } + + function logServer(port, ip, http) { + Util.log('* Server running at ' + http + ip + ':' + port); + } + + function addSockets(server) { + var listen, msg, + config = main.config, + status = 'off'; + + if (config.socket && Socket) { + listen = Socket.listen(server); + + if (listen) { + status = 'on'; + Console.init(); + Terminal.init(); + } + } + + msg = CloudFunc.formatMsg('sockets', '', status); + + Util.log(msg); } function respond(req, res) {