diff --git a/core/bbs.js b/core/bbs.js index 3ae00e37..b877f918 100644 --- a/core/bbs.js +++ b/core/bbs.js @@ -10,6 +10,7 @@ const conf = require('./config.js'); const logger = require('./logger.js'); const database = require('./database.js'); const clientConns = require('./client_connections.js'); +const resolvePath = require('./misc_util.js').resolvePath; // deps const async = require('async'); @@ -25,30 +26,38 @@ exports.bbsMain = bbsMain; // object with various services we want to de-init/shutdown cleanly if possible const initServices = {}; +const ENIGMA_COPYRIGHT = 'ENiGMA½ Copyright (c) 2014-2017 Bryan Ashby'; +const HELP = +`${ENIGMA_COPYRIGHT} +usage: main.js + +valid args: + --version : display version + --help : displays this help + --config PATH : override default config.hjson path +`; + +function printHelpAndExit() { + console.info(HELP); + process.exit(); +} + function bbsMain() { async.waterfall( [ function processArgs(callback) { - const args = process.argv.slice(2); + const argv = require('minimist')(process.argv.slice(2)); - var configPath; - - if(args.indexOf('--help') > 0) { - // :TODO: display help - } else { - let argCount = args.length; - for(let i = 0; i < argCount; ++i) { - const arg = args[i]; - if('--config' === arg) { - configPath = args[i + 1]; - } - } + if(argv.help) { + printHelpAndExit(); } - callback(null, configPath || conf.getDefaultPath(), _.isString(configPath)); + const configOverridePath = argv.config; + + return callback(null, configOverridePath || conf.getDefaultPath(), _.isString(configOverridePath)); }, function initConfig(configPath, configPathSupplied, callback) { - conf.init(configPath, function configInit(err) { + conf.init(resolvePath(configPath), function configInit(err) { // // If the user supplied a path and we can't read/parse it @@ -80,7 +89,7 @@ function bbsMain() { function complete(err) { // note this is escaped: fs.readFile(paths.join(__dirname, '../misc/startup_banner.asc'), 'utf8', (err, banner) => { - console.info('ENiGMA½ Copyright (c) 2014-2017 Bryan Ashby'); + console.info(ENIGMA_COPYRIGHT); if(!err) { console.info(banner); } diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 5a6f36d1..70f2eb12 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -107,13 +107,13 @@ exports.getModule = class WebServerModule extends ServerModule { route = new Route(route); if(!route.isValid()) { - Log( { route : route }, 'Cannot add route: missing or invalid required members' ); + Log.warn( { route : route }, 'Cannot add route: missing or invalid required members' ); return false; } const routeKey = route.getRouteKey(); if(routeKey in this.routes) { - Log( { route : route }, 'Cannot add route: duplicate method/path combination exists' ); + Log.warn( { route : route }, 'Cannot add route: duplicate method/path combination exists' ); return false; } diff --git a/docs/config.md b/docs/config.md index ecd2ed89..ca760676 100644 --- a/docs/config.md +++ b/docs/config.md @@ -4,7 +4,7 @@ Configuration files in ENiGMA½ are simple UTF-8 encoded [HJSON](http://hjson.or ## System Configuration The main system configuration file, `config.hjson` both overrides defaults and provides additional configuration such as message areas. The default path is `~/.config/enigma-bbs/config.hjson` though you can override this with the `--config` parameter when invoking `main.js`. Values found in core/config.js may be overridden by simply providing the object members you wish replace. -**Windows note**: **~** resolves to *C:\Users\YOURLOGINNAME\* on modern Windows installations, e.g. `C:\Users\NuSkooler\\.config\enigma-bbs\config.hjson` +**Windows note**: **~** resolves to *C:\Users\YOURLOGINNAME\* on modern Windows installations, e.g. `C:\Users\NuSkooler\.config\enigma-bbs\config.hjson` ### oputil.js Please see `oputil.js config` for configuration generation options.