balena-cli/build/actions/auth.js
Juan Cruz Viotti f8470287c1 Separate general help per topic relevance
Only list primary commands by default, unless a `--verbose` option is
passed to list the additional ones.

Fixes: https://github.com/resin-io/resin-cli/issues/101
2015-10-02 08:50:32 -04:00

122 lines
4.2 KiB
JavaScript

(function() {
var Promise, _, events, form, open, resin, url, validEmail, visuals;
Promise = require('bluebird');
open = Promise.promisify(require('open'));
_ = require('lodash');
url = require('url');
resin = require('resin-sdk');
form = require('resin-cli-form');
visuals = require('resin-cli-visuals');
validEmail = require('valid-email');
events = require('resin-cli-events');
exports.login = {
signature: 'login [token]',
description: 'login to resin.io',
help: 'Use this command to login to your resin.io account.\n\nTo login, you need your token, which is accesible from the preferences page.\n\nExamples:\n\n $ resin login\n $ resin login "eyJ0eXAiOiJKV1Qi..."',
primary: true,
action: function(params, options, done) {
return resin.settings.get('dashboardUrl').then(function(dashboardUrl) {
return url.resolve(dashboardUrl, '/preferences');
}).then(function(preferencesUrl) {
if (params.token != null) {
return params.token;
}
console.info("To login to the Resin CLI, you need your unique token, which is accesible from\nthe preferences page at " + preferencesUrl + "\n\nAttempting to open a browser at that location...");
return open(preferencesUrl)["catch"](function() {
return console.error("Unable to open a web browser in the current environment.\nPlease visit " + preferencesUrl + " manually.");
}).then(function() {
return form.ask({
message: 'What\'s your token? (visible in the preferences page)',
type: 'input'
});
});
}).then(resin.auth.loginWithToken).then(function(token) {
return resin.auth.isLoggedIn().then(function(isLoggedIn) {
if (isLoggedIn) {
return token;
}
throw new Error('Authentication failed');
});
}).then(resin.auth.whoami).tap(function(username) {
console.info("Successfully logged in as: " + username);
return events.send('user.login');
}).nodeify(done);
}
};
exports.logout = {
signature: 'logout',
description: 'logout from resin.io',
help: 'Use this command to logout from your resin.io account.o\n\nExamples:\n\n $ resin logout',
permission: 'user',
action: function(params, options, done) {
return resin.auth.logout().then(function() {
return events.send('user.logout');
}).nodeify(done);
}
};
exports.signup = {
signature: 'signup',
description: 'signup to resin.io',
help: 'Use this command to signup for a resin.io account.\n\nIf signup is successful, you\'ll be logged in to your new user automatically.\n\nExamples:\n\n $ resin signup\n Email: me@mycompany.com\n Username: johndoe\n Password: ***********\n\n $ resin whoami\n johndoe',
action: function(params, options, done) {
return form.run([
{
message: 'Email:',
name: 'email',
type: 'input',
validate: function(input) {
if (!validEmail(input)) {
return 'Email is not valid';
}
return true;
}
}, {
message: 'Username:',
name: 'username',
type: 'input'
}, {
message: 'Password:',
name: 'password',
type: 'password',
validate: function(input) {
if (input.length < 8) {
return 'Password should be 8 characters long';
}
return true;
}
}
]).then(resin.auth.register).then(resin.auth.loginWithToken).tap(function() {
return events.send('user.signup');
}).nodeify(done);
}
};
exports.whoami = {
signature: 'whoami',
description: 'get current username and email address',
help: 'Use this command to find out the current logged in username and email address.\n\nExamples:\n\n $ resin whoami',
permission: 'user',
action: function(params, options, done) {
return Promise.props({
username: resin.auth.whoami(),
email: resin.auth.getEmail()
}).then(function(results) {
return console.log(visuals.table.vertical(results, ['$account information$', 'username', 'email']));
}).nodeify(done);
}
};
}).call(this);