balena-cli/build/actions/auth.js

125 lines
3.8 KiB
JavaScript
Raw Normal View History

2015-02-26 15:47:56 +00:00
(function() {
2015-10-21 13:37:25 +00:00
var Promise, _, events, form, resin, validation, visuals;
2015-08-13 18:50:36 +00:00
Promise = require('bluebird');
2015-08-12 12:17:46 +00:00
_ = require('lodash');
2015-02-26 15:47:56 +00:00
resin = require('resin-sdk');
2015-07-27 12:08:55 +00:00
form = require('resin-cli-form');
2015-02-26 15:47:56 +00:00
visuals = require('resin-cli-visuals');
2015-08-31 21:39:48 +00:00
events = require('resin-cli-events');
2015-10-21 13:37:25 +00:00
validation = require('../utils/validation');
2015-02-26 15:47:56 +00:00
exports.login = {
signature: 'login',
2015-02-26 15:47:56 +00:00
description: 'login to resin.io',
help: 'Use this command to login to your resin.io account.\n\nExamples:\n\n $ resin login',
options: [
{
signature: 'email',
parameter: 'email',
description: 'email',
alias: ['e', 'u']
}, {
signature: 'password',
parameter: 'password',
description: 'password',
alias: 'p'
}
],
primary: true,
2015-02-26 15:47:56 +00:00
action: function(params, options, done) {
return form.run([
{
message: 'Email:',
name: 'email',
type: 'input',
2015-10-21 13:37:25 +00:00
validate: validation.validateEmail
}, {
message: 'Password:',
name: 'password',
type: 'password'
2015-02-26 15:47:56 +00:00
}
], {
override: options
}).then(resin.auth.login).then(resin.auth.twoFactor.isPassed).then(function(isTwoFactorAuthPassed) {
if (isTwoFactorAuthPassed) {
return;
}
return form.ask({
message: 'Two factor auth challenge:',
name: 'code',
type: 'input'
}).then(resin.auth.twoFactor.challenge)["catch"](function() {
return resin.auth.logout().then(function() {
throw new Error('Invalid two factor authentication code');
2015-08-13 18:50:36 +00:00
});
});
}).then(resin.auth.whoami).tap(function(username) {
2015-08-31 21:39:48 +00:00
console.info("Successfully logged in as: " + username);
return events.send('user.login');
2015-08-13 18:50:36 +00:00
}).nodeify(done);
2015-02-26 15:47:56 +00:00
}
};
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',
2015-02-26 15:47:56 +00:00
permission: 'user',
action: function(params, options, done) {
2015-08-31 21:39:48 +00:00
return resin.auth.logout().then(function() {
return events.send('user.logout');
}).nodeify(done);
2015-02-26 15:47:56 +00:00
}
};
exports.signup = {
signature: 'signup',
description: 'signup to resin.io',
2015-08-13 18:50:36 +00:00
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',
2015-02-26 15:47:56 +00:00
action: function(params, options, done) {
2015-08-13 18:50:36 +00:00
return form.run([
{
message: 'Email:',
name: 'email',
type: 'input',
2015-10-21 13:37:25 +00:00
validate: validation.validateEmail
2015-08-13 18:50:36 +00:00
}, {
message: 'Username:',
name: 'username',
type: 'input'
}, {
message: 'Password:',
name: 'password',
type: 'password',
2015-10-21 13:37:25 +00:00
validate: validation.validatePassword
2015-02-26 15:47:56 +00:00
}
2015-08-31 21:39:48 +00:00
]).then(resin.auth.register).then(resin.auth.loginWithToken).tap(function() {
return events.send('user.signup');
}).nodeify(done);
2015-02-26 15:47:56 +00:00
}
};
exports.whoami = {
signature: 'whoami',
2015-08-13 18:50:36 +00:00
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',
2015-02-26 15:47:56 +00:00
permission: 'user',
action: function(params, options, done) {
2015-08-13 18:50:36 +00:00
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);
2015-02-26 15:47:56 +00:00
}
};
}).call(this);