1
0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-11-13 03:35:52 +01:00
verdaccio/lib/cli.js
2013-10-11 09:32:59 +04:00

120 lines
3.6 KiB
JavaScript

#!/usr/bin/env node
var logger = require('./logger');
logger.setup(); // default setup
var pkg_file = '../package.yaml';
var fs = require('fs');
var yaml = require('js-yaml');
var commander = require('commander');
var server = require('./index');
var crypto = require('crypto');
var pkg = require(pkg_file);
commander
.option('-l, --listen <[host:]port>', 'host:port number to listen on (default: localhost:4873)')
.option('-c, --config <config.yaml>', 'use this configuration file (default: ./config.yaml)')
.version(pkg.version)
.parse(process.argv);
if (commander.args.length == 1 && !commander.config) {
// handling "sinopia [config]" case if "-c" is missing in commandline
commander.config = commander.args.pop();
}
if (commander.args.length != 0) {
commander.help();
}
var config, config_path, have_question;
try {
if (commander.config) {
config_path = commander.config;
config = yaml.safeLoad(fs.readFileSync(config_path, 'utf8'));
} else {
config_path = './config.yaml';
try {
config = yaml.safeLoad(fs.readFileSync(config_path, 'utf8'));
} catch(err) {
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) {
logger.logger.fatal({file: config_path, err: err}, 'cannot open config file @{file}: @{!err.message}');
process.exit(1);
}
if (!have_question) afterConfigLoad();
function get_hostport() {
// command line || config file || default
var hostport = commander.listen || String(config.listen || '') || '4873';
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]);
logger.logger.warn({addr: 'http://'+hostport[0]+':'+hostport[1]+'/'}, 'Server is listening on @{addr}');
// 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('===========================================================');
}