UNPKG

jitsu

Version:

Flawless command line deployment of Node.js apps to the cloud

160 lines (139 loc) 3.82 kB
/* * config.js: Configuration for the jitsu CLI. * * (C) 2010, Nodejitsu Inc. * */ var path = require('path'), jitsu = require('../jitsu'); // // Store the original `jitsu.config.load()` function // for later use. // var _load = jitsu.config.load; // // Update env if using Windows // if (process.platform == "win32") { process.env.HOME = process.env.USERPROFILE; } // // Setup target file for `.jitsuconf`. // // // TODO: Refactor broadway to emit `bootstrap:after` and put this // code in a handler for that event // try { jitsu.config.env().file({ file: jitsu.argv.jitsuconf || jitsu.argv.j || '.jitsuconf', dir: process.env.HOME, search: true }); } catch (err) { console.log('Error parsing ' + jitsu.config.stores.file.file.magenta); console.log(err.message); console.log(''); console.log('This is most likely not an error in jitsu'); console.log('Please check the .jitsuconf file and try again'); console.log(''); process.exit(1); } var defaults = { analyze: true, "apiTokenName": 'jitsu', release: 'build', colors: true, loglevel: 'info', loglength: 110, protocol: 'https', remoteHost: 'api.nodejitsu.com', requiresAuth: ['apps', 'databases', 'env', 'logs', 'snapshots'], root: process.env.HOME, timeout: 4 * 60 * 1000, tmproot: path.join(process.env.HOME, '.jitsu/tmp'), userconfig: '.jitsuconf', logs: { host: "logs.nodejitsu.com", port: 443, protocol: "https" } }; Object.defineProperty(defaults, 'remoteUri', { get: function () { var port = jitsu.config.get('port') || ''; if (port) { port = ':' + port; } return [jitsu.config.get('protocol'), '://', jitsu.config.get('remoteHost'), port].join(''); } }); // // Set defaults for `jitsu.config`. // jitsu.config.defaults(defaults); // // Use the `flatiron-cli-config` plugin for `jitsu config *` commands // jitsu.use(require('flatiron-cli-config'), { store: 'file', restricted: [ 'auth', 'root', 'remoteUri', 'tmproot', 'userconfig' ], before: { list: function () { var username = jitsu.config.get('username'), configFile = jitsu.config.stores.file.file; var display = [ ' here is the ' + configFile.grey + ' file:', 'To change a property type:', 'jitsu config set <key> <value>', ]; if (!username) { jitsu.log.warn('No user has been setup on this machine'); display[0] = 'Hello' + display[0]; } else { display[0] = 'Hello ' + username.green + display[0]; } display.forEach(function (line) { jitsu.log.help(line); }); return true; } } }); // // Override `jitsu.config.load` so that we can map // some existing properties to their correct location. // jitsu.config.load = function (callback) { _load.call(jitsu.config, function (err, store) { if (err) { return callback(err, true, true, true); } jitsu.config.set('userconfig', jitsu.config.stores.file.file); if (store.auth) { var auth = store.auth.split(':'); jitsu.config.clear('auth'); jitsu.config.set('username', auth[0]); jitsu.config.set('password', auth[1]); // create a new token and remove password from being saved to .jitsuconf jitsu.tokens.create(auth[0], (jitsu.config.get('apiTokenName')||'jitsu'), function(err, result) { if(!err && result) { var token = Object.getOwnPropertyNames(result).filter(function(n){return n !== 'operation'}).pop(); jitsu.config.set('apiToken', result[token]); jitsu.config.set('apiTokenName', token); jitsu.config.clear('password'); return jitsu.config.save(callback); } }); } callback(null, store); }); };