diff --git a/lib/commands/config.js b/lib/commands/config.js new file mode 100644 index 0000000..5077cea --- /dev/null +++ b/lib/commands/config.js @@ -0,0 +1,46 @@ +var modulus = require('../modulus'), + userConfig = require('../common/api').userConfig, + util = require('util') + url = require('url'); + +const invalid = ['username', 'userId', 'apiKey']; + +exports.get = function list(name, cb) { + userConfig.load(); + + if (!userConfig.data.hasOwnProperty(name)) { + return cb('Configuration name not found.'); + } + + modulus.io.print(util.format('%s: %s', name, userConfig.data[name]).input); + + return cb(); +}; + +exports.set = function set(name, value, cb) { + if (invalid.indexOf(name.toLowerCase()) >= 0) { + // + // Don't allow username, userId, or apiKey to be set by the user. + // + return cb(util.format('Cannot set value of \'%s\'', name)); + } + + userConfig.load(); + + if (!userConfig.data) userConfig.data = {}; + + try { + // + // Attempt to parse the value the JSON. This will ensure that Booleans are + // correctly stored as JSON rather than a string. + // + userConfig.data[name] = JSON.parse(value); + } catch (e) { + userConfig.data[name] = value; + } + + userConfig.save(userConfig.data); + modulus.io.print(util.format('Saved \'%s\' to \'%s\'', value, name).input); + + return cb(); +}; diff --git a/lib/commands/user.js b/lib/commands/user.js index 3ed9e48..32a079f 100755 --- a/lib/commands/user.js +++ b/lib/commands/user.js @@ -1,7 +1,8 @@ var modulus = require('../modulus'), userConfig = require('../common/api').userConfig, userController = require('../controllers/user'), - error = require('../common/error'); + error = require('../common/error') + util = require('util'); var user = {}; @@ -26,11 +27,25 @@ user.authenticate = function(username, password, loginProvided, passwordProvided } } } - var udata = { - username: u.username, - userId : u.id, - apiKey : u.authToken - }; + + userConfig.load(); + var udata = null; + + if (userConfig.data) { + // Don't overwrite existing data. + udata = util._extend(userConfig.data, { + username: u.username, + userId : u.id, + apiKey : u.authToken + }); + } else { + udata = { + username: u.username, + userId : u.id, + apiKey : u.authToken + }; + } + userConfig.save(udata); modulus.io.success('Signed in as user ' + u.username.data); return cb(); @@ -46,7 +61,7 @@ user.authenticateGithub = function(username, password, loginProvided, passwordPr err = error.handleApiError(err, 'LOGIN', cb); if(err.length > 0) { modulus.io.error(err); - + if(loginProvided && passwordProvided) { return; } else if(loginProvided) { diff --git a/lib/common/api.js b/lib/common/api.js index bb035e0..a67424f 100755 --- a/lib/common/api.js +++ b/lib/common/api.js @@ -1,7 +1,23 @@ -var librarian = require('../librarian/librarian').init('api.onmodulus.net', 443, true), - UserConfig = require('./userConfig'); +var UserConfig = require('./userConfig'), + url = require('url'), + librarian = require('../librarian/librarian'), + userConfig = new UserConfig(); + +userConfig.load(); + +if (userConfig.data && userConfig.data.api_uri) { + var url = url.parse(userConfig.data.api_uri); + + if (url.protocol === 'https:') { + librarian.init(url.hostname, url.port || 443, true); + } else { + librarian.init(url.hostname, url.port || 80, false); + } +} else { + librarian.init('api.onmodulus.net', 443, true); +} module.exports = { librarian : librarian, userConfig : new UserConfig() -}; \ No newline at end of file +}; diff --git a/lib/controllers/project.js b/lib/controllers/project.js index d292700..3b755cb 100755 --- a/lib/controllers/project.js +++ b/lib/controllers/project.js @@ -546,7 +546,7 @@ Project.prototype.isMeteor = function(dir, callback) { //----------------------------------------------------------------------------- Project.prototype.demeteorize = function(dir, nodeVersion, callback) { var out = path.join(dir, '.demeteorized'), - nodeVersion = nodeVersion || 'v0.8.24'; + nodeVersion = nodeVersion || 'v0.10.22'; if(fs.existsSync(out)) { fsTools.removeSync(out); diff --git a/lib/modulus.js b/lib/modulus.js index d7727b4..d6de985 100755 --- a/lib/modulus.js +++ b/lib/modulus.js @@ -26,6 +26,7 @@ modulus.commands = {}; modulus.commands.user = require('./commands/user'); modulus.commands.project = require('./commands/project'); modulus.commands.env = require('./commands/env'); +modulus.commands.config = require('./commands/config') modulus.commands.misc = require('./commands/misc'); modulus.runCommand = function(command, args, authRequired) { @@ -74,6 +75,7 @@ modulus.routes = [ require('./routes/user')(modulus), require('./routes/project')(modulus), require('./routes/env')(modulus), + require('./routes/config')(modulus), require('./routes/misc')(modulus) ]; diff --git a/lib/routes/config.js b/lib/routes/config.js new file mode 100644 index 0000000..c7dab29 --- /dev/null +++ b/lib/routes/config.js @@ -0,0 +1,31 @@ +module.exports = function(modulus) { + var help = new modulus.help('Configuration', modulus); + + help.add('get', function() { + this.line('config get '.verbose); + this.line('Get a configuration value.'.input); + }); + + modulus.program + .command('config get', '') + .description('Get a configuration value.') + .on('--help', help.commands.get) + .action(function(name) { + modulus.runCommand(modulus.commands.config.get, [name], false); + }); + + help.add('set', function() { + this.line('config set '.verbose); + this.line('Set a configuration value.'.input); + }); + + modulus.program + .command('config set', ' ') + .description('Set a configuration value.') + .on('--help', help.commands.set) + .action(function(name, value) { + modulus.runCommand(modulus.commands.config.set, [name, value], false); + }); + + return { base: 'config', help: help }; +}; diff --git a/package.json b/package.json index fd6c9b6..214ed46 100755 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "command line", "modulusio" ], - "version": "0.2.1", + "version": "0.2.2-2", "author": "Modulus ", "maintainers": [ "zwigby ",