Implement interactive signup form

This commit is contained in:
Juan Cruz Viotti 2014-12-24 11:14:30 -04:00
parent 33e209def5
commit 16ddd8ccb6
3 changed files with 49 additions and 7 deletions

View File

@ -1,5 +1,5 @@
_ = require('lodash')
url = require('url')
open = require('open')
async = require('async')
resin = require('../resin')
ui = require('../ui')
@ -26,9 +26,20 @@ exports.logout = permissions.user ->
resin.auth.logout()
exports.signup = ->
signupUrl = resin.settings.get('urls.signup')
absUrl = url.resolve(resin.settings.get('remoteUrl'), signupUrl)
open(absUrl)
async.waterfall([
(callback) ->
ui.widgets.register(callback)
(credentials, callback) ->
resin.auth.register credentials, (error, token) ->
return callback(error, credentials)
(credentials, callback) ->
credentials = _.omit(credentials, 'email')
resin.auth.login(credentials, callback)
], errors.handle)
exports.whoami = permissions.user ->
resin.auth.whoami (error, username) ->

View File

@ -93,12 +93,19 @@ capitano.command
help: '''
Use this command to signup for a resin.io account.
In the future, this command may display a form in the terminal and handle
the registration purely from the command line, but for reasons of simplicity,
it opens your default web browser at the web based signup form.
If signup is successful, you'll be logged in to your new user automatically.
TODO: We need to provide a non interactive way to use this command,
however it's not clear to me how to do it easily for now.
Examples:
$ resin signup
Email: me@mycompany.com
Username: johndoe
Password: ***********
$ resin whoami
johndoe
'''
action: actions.auth.signup

View File

@ -3,6 +3,30 @@ inquirer = require('inquirer')
exports.table = require('./table/table')
exports.register = (callback) ->
inquirer.prompt([
{
type: 'input'
name: 'email'
message: 'Email'
}
{
type: 'input'
name: 'username'
message: 'Username'
}
{
type: 'password'
name: 'password'
message: 'Password'
validate: (input) ->
if input.length < 8
return 'Password should be 8 characters long'
return true
}
], _.partial(callback, null))
exports.login = (callback) ->
inquirer.prompt([
{