diff --git a/lib/cli.js b/lib/cli.js index 6f0112dcb..c56d5ec8d 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -23,8 +23,8 @@ if (commander.args.length != 0) { commander.help(); } +var config, config_path, have_question; try { - var config, config_path; if (commander.config) { config_path = commander.config; config = yaml.safeLoad(fs.readFileSync(config_path, 'utf8')); @@ -33,10 +33,34 @@ try { try { config = yaml.safeLoad(fs.readFileSync(config_path, 'utf8')); } catch(err) { - var created_config = require('../lib/config_gen')(); - config = yaml.safeLoad(created_config.yaml); - console.log('starting with default config, use user: "%s", pass: "%s" to authenticate', created_config.user, created_config.pass); - fs.writeFileSync(config_path, created_config.yaml); + var readline = require('readline'); + var rl = readline.createInterface(process.stdin, process.stdout); + var timeout = setTimeout(function() { + console.log('I got tired waiting for an answer. Exitting...'); + process.exit(1); + }, 20000); + + (function askUser() { + have_question = true; + rl.question('Config file doesn\'t exist, create a new one? (Y/n) ', function(x) { + clearTimeout(timeout); + if (x[0] == 'Y' || x[0] == 'y' || x === '') { + rl.close(); + + var created_config = require('../lib/config_gen')(); + config = yaml.safeLoad(created_config.yaml); + write_config_banner(created_config, config); + fs.writeFileSync(config_path, created_config.yaml); + afterConfigLoad(); + } else if (x[0] == 'N' || x[0] == 'n') { + rl.close(); + console.log('So, you just accidentally run me in a wrong folder. Exitting...'); + process.exit(1); + } else { + askUser(); + } + }); + })(); } } } catch(err) { @@ -47,24 +71,50 @@ try { throw err; } } -if (!config.user_agent) config.user_agent = 'Sinopia/'+pkg.version; -if (!config.self_path) config.self_path = config_path; -// command line || config file || default -var hostport = commander.listen || String(config.listen || '') || '4873'; +if (!have_question) afterConfigLoad(); -hostport = hostport.split(':'); -if (hostport.length < 2) { - hostport = [undefined, hostport[0]]; -} -if (hostport[0] == null) { - hostport[0] = 'localhost'; -} -server(config).listen(hostport[1], hostport[0]); -console.log('Server is listening on http://%s:%s/', hostport[0], hostport[1]); +function get_hostport() { + // command line || config file || default + var hostport = commander.listen || String(config.listen || '') || '4873'; -// undocumented stuff for tests -if (typeof(process.send) === 'function') { - process.send({sinopia_started: hostport}); + hostport = hostport.split(':'); + if (hostport.length < 2) { + hostport = [undefined, hostport[0]]; + } + if (hostport[0] == null) { + hostport[0] = 'localhost'; + } + return hostport; +} + +function afterConfigLoad() { + if (!config.user_agent) config.user_agent = 'Sinopia/'+pkg.version; + if (!config.self_path) config.self_path = config_path; + + var hostport = get_hostport(); + server(config).listen(hostport[1], hostport[0]); + console.log('Server is listening on http://%s:%s/', hostport[0], hostport[1]); + + // undocumented stuff for tests + if (typeof(process.send) === 'function') { + process.send({sinopia_started: hostport}); + } +} + +function write_config_banner(def, config) { + var hostport = get_hostport(); + console.log('==========================================================='); + console.log(' Creating a new configuration file: "%s"', config_path); + console.log(' '); + console.log(' If you want to setup npm to work with this registry,'); + console.log(' run following commands:'); + console.log(' '); + console.log(' $ npm set registry http://%s:%s/', hostport[0], hostport[1]); + console.log(' $ npm set always-auth true'); + console.log(' $ npm adduser'); + console.log(' Username: %s', def.user); + console.log(' Password: %s', def.pass); + console.log('==========================================================='); }