mirror of
https://github.com/balena-io/balena-cli.git
synced 2024-12-21 06:33:28 +00:00
79afa79fd9
This enforces all clients to use the Resin Settings Client version that the SDK provides, reducing incompatibilities caused by different modules requiring different Resin Settings Client versions.
121 lines
4.2 KiB
JavaScript
121 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..."',
|
|
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);
|