-
Notifications
You must be signed in to change notification settings - Fork 0
/
signup.js
161 lines (137 loc) · 4.41 KB
/
signup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
'use strict'
const ora = require('ora')
const consola = require('consola')
const request = require('request')
const inquirer = require('inquirer')
const countriesData = require('country-region-data')
const { Command } = require('@oclif/command')
const config = require('../config')
const {
isEmailValid,
isZipCodeValid,
isNotEmpty,
isPasswordValid
} = require('../validator')
/**
* Prompt password and password confirmation until they match
*
* @returns {Promise} password
*/
async function askForPassowords () {
const { password, confirmPassword } = await inquirer.prompt([
{
name: 'password',
message: 'Enter your password',
type: 'password',
validate: isPasswordValid
},
{
name: 'confirmPassword',
message: 'Confirm your password',
type: 'password',
validate: isNotEmpty
}
])
if (password !== confirmPassword) {
consola.error('Passwords do not match')
return askForPassowords()
}
return Promise.resolve(password)
}
class SignupCommand extends Command {
async run () {
consola.info('☁️ Welcome to Bloq!')
consola.info('We will guide you to create your new account')
config.delete('user')
config.delete('accessToken')
config.delete('clientToken')
config.delete('clientId')
config.delete('clientSecret')
const { email, displayName } = await inquirer.prompt([
{ name: 'email', message: 'Enter your email address', type: 'input', validate: isEmailValid },
{ name: 'displayName', message: 'Enter your name', type: 'input', validate: isNotEmpty }
])
const { countryName } = await inquirer.prompt([
{
name: 'countryName',
message: 'Select your country',
type: 'rawlist',
choices: countriesData.map(({ countryName }) => countryName),
default: 234
}
])
const country = countriesData.find(c => c.countryName === countryName)
const { regionName, zipCode, address } = await inquirer.prompt([
{
name: 'regionName',
message: 'Select your state/province',
type: 'rawlist',
choices: country.regions.map(({ name }) => name),
default: 234
},
{
name: 'zipCode',
message: 'Enter your zip code',
type: 'input',
validate: zipCode => isZipCodeValid(country.countryShortCode, zipCode)
},
{
name: 'address',
message: 'Enter your street address',
type: 'input',
validate: isNotEmpty
}
])
const region = country.regions.find(r => r.name === regionName)
const password = await askForPassowords()
const { acceptTerms } = await inquirer.prompt([
{
name: 'acceptTerms',
message: 'Use of Bloq’s services is subject to the Terms of Service found at https://bloq.cloud/legal \nPlease confirm that you have read and agree to the Terms of Service by selecting [“I accept”]',
type: 'list',
choices: ['Decline', 'I accept']
}
])
if (acceptTerms === 'Decline') {
return consola.error('Terms & Conditions must be accepted in order to create a Bloq account and access Bloq services.') // eslint-disable-line
}
const env = config.get('env') || 'prod'
const url = `${config.get(`services.${env}.accounts.url`)}/users`
const { confirm } = await inquirer.prompt([
{ name: 'confirm', message: 'Please check that your information is correct. Do you want to continue?', type: 'confirm' } // eslint-disable-line
])
if (!confirm) {
return consola.error('Bloq signup aborted')
}
const body = {
json: {
email,
displayName,
password,
billingAddress: {
address,
zipCode,
state: region.shortCode,
country: country.countryShortCode
}
}
}
consola.info('Creating your new Bloq account')
const spinner = ora().start()
request.post(url, body, function (err, data) {
spinner.stop()
if (err) {
return consola.error(`Error creating Bloq account: ${err}`)
}
if (data.statusCode !== 201) {
return consola.error(
`Error creating Bloq account: ${data.body.code || data.body.message}`
)
}
consola.success('Generated new Bloq account')
consola.info(`Email sent to ${email} confirm your account.`)
})
}
}
SignupCommand.description = 'Setup a new Bloq account'
module.exports = SignupCommand