Merge pull request #8 from resin-io/feature/login-with-token

Login with token
This commit is contained in:
Juan Cruz Viotti 2015-04-07 08:12:12 -04:00
commit 727af42ad4
4 changed files with 59 additions and 87 deletions

1
.gitignore vendored
View File

@ -32,3 +32,4 @@ bin/node
release/build
npm-shrinkwrap.json
.resinconf

View File

@ -1,5 +1,7 @@
(function() {
var _, async, resin, url, visuals;
var TOKEN_URL, _, async, open, resin, url, visuals;
open = require('open');
_ = require('lodash-contrib');
@ -27,43 +29,29 @@
}
};
TOKEN_URL = url.resolve(resin.settings.get('remoteUrl'), resin.settings.get('urls.preferences'));
exports.login = {
signature: 'login',
signature: 'login [token]',
description: 'login to resin.io',
help: 'Use this command to login to your resin.io account.\nYou need to login before you can use most of the commands this tool provides.\n\nYou can pass your credentials as `--username` and `--password` options, or you can omit the\ncredentials, in which case the tool will present you with an interactive login form.\n\nExamples:\n\n $ resin login --username <username> --password <password>\n $ resin login',
options: [
{
signature: 'username',
parameter: 'username',
description: 'user name',
alias: 'u'
}, {
signature: 'password',
parameter: 'password',
description: 'user password',
alias: 'p'
}
],
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\n " + TOKEN_URL + "\n\nExamples:\n\n $ resin login\n $ resin login \"eyJ0eXAiOiJKV1Qi...\"",
action: function(params, options, done) {
var hasOptionCredentials;
hasOptionCredentials = !_.isEmpty(options);
if (hasOptionCredentials) {
if (!options.username) {
return done(new Error('Missing username'));
}
if (!options.password) {
return done(new Error('Missing password'));
}
}
console.info("To login to the Resin CLI, you need your unique token, which is accesible from\nthe preferences page at " + TOKEN_URL + "\n\nAttempting to open a browser at that location...");
return async.waterfall([
function(callback) {
if (hasOptionCredentials) {
return callback(null, options);
} else {
return visuals.widgets.login(callback);
return open(TOKEN_URL, function(error) {
if (error != null) {
console.error("Unable to open a web browser in the current environment.\nPlease visit " + TOKEN_URL + " manually.");
}
return callback();
});
}, function(callback) {
if (params.token != null) {
return callback(null, params.token);
}
}, function(credentials, callback) {
return resin.auth.login(credentials, callback);
return visuals.widgets.ask('What\'s your token? (visible in the preferences page)', null, callback);
}, function(token, callback) {
return resin.auth.loginWithToken(token, done);
}
], done);
}

View File

@ -1,22 +1,12 @@
# login
# login [token]
Use this command to login to your resin.io account.
You need to login before you can use most of the commands this tool provides.
You can pass your credentials as `--username` and `--password` options, or you can omit the
credentials, in which case the tool will present you with an interactive login form.
To login, you need your token, which is accesible from the preferences page:
https://dashboard.resin.io/preferences?tab=details
Examples:
$ resin login --username <username> --password <password>
$ resin login
## Options
### --username, -u &#60;username&#62;
user name
### --password, -p &#60;password&#62;
user password
$ resin login "eyJ0eXAiOiJKV1Qi..."

View File

@ -1,3 +1,4 @@
open = require('open')
_ = require('lodash-contrib')
url = require('url')
async = require('async')
@ -21,59 +22,51 @@ exports.whoami =
console.log(username)
return done()
exports.login =
signature: 'login'
description: 'login to resin.io'
help: '''
Use this command to login to your resin.io account.
You need to login before you can use most of the commands this tool provides.
TOKEN_URL = url.resolve(resin.settings.get('remoteUrl'), resin.settings.get('urls.preferences'))
You can pass your credentials as `--username` and `--password` options, or you can omit the
credentials, in which case the tool will present you with an interactive login form.
exports.login =
signature: 'login [token]'
description: 'login to resin.io'
help: """
Use this command to login to your resin.io account.
To login, you need your token, which is accesible from the preferences page:
#{TOKEN_URL}
Examples:
$ resin login --username <username> --password <password>
$ resin login
'''
options: [
{
signature: 'username'
parameter: 'username'
description: 'user name'
alias: 'u'
}
{
signature: 'password'
parameter: 'password'
description: 'user password'
alias: 'p'
}
]
$ resin login "eyJ0eXAiOiJKV1Qi..."
"""
action: (params, options, done) ->
hasOptionCredentials = not _.isEmpty(options)
console.info """
To login to the Resin CLI, you need your unique token, which is accesible from
the preferences page at #{TOKEN_URL}
if hasOptionCredentials
Attempting to open a browser at that location...
"""
if not options.username
return done(new Error('Missing username'))
if not options.password
return done(new Error('Missing password'))
async.waterfall [
async.waterfall([
(callback) ->
if hasOptionCredentials
return callback(null, options)
else
return visuals.widgets.login(callback)
open TOKEN_URL, (error) ->
if error?
console.error """
Unable to open a web browser in the current environment.
Please visit #{TOKEN_URL} manually.
"""
return callback()
(credentials, callback) ->
resin.auth.login(credentials, callback)
(callback) ->
return callback(null, params.token) if params.token?
visuals.widgets.ask('What\'s your token? (visible in the preferences page)', null, callback)
], done
(token, callback) ->
resin.auth.loginWithToken(token, done)
], done)
exports.logout =
signature: 'logout'