1 | const inquirer = require('inquirer')
|
2 | const logger = require('../logger')
|
3 |
|
4 | class LoginAction {
|
5 | |
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | static register (caporal, appSettings, userSettings, dcHttpClient) {
|
12 | caporal
|
13 | .command('login')
|
14 | .description('Login')
|
15 | .option('--username [email]', 'Email address to login')
|
16 | .option('--password [password]', 'Password to login')
|
17 | .action(async (args, options) => {
|
18 | try {
|
19 | await new LoginAction(userSettings, dcHttpClient).run(options)
|
20 | } catch (err) {
|
21 | logger.error(err.message)
|
22 | return process.exit(1)
|
23 | }
|
24 | })
|
25 | }
|
26 |
|
27 | |
28 |
|
29 |
|
30 |
|
31 | constructor (userSettings, dcHttpClient) {
|
32 | this.userSettings = userSettings
|
33 | this.dcHttpClient = dcHttpClient
|
34 | }
|
35 |
|
36 | |
37 |
|
38 |
|
39 | async run (options) {
|
40 | this.options = options
|
41 | const { username, password } = await this.getUsernameAndPassword()
|
42 | await this.dcHttpClient.login(username, password)
|
43 | await this.userSettings.setUsername(username)
|
44 | logger.info('Login successful')
|
45 | }
|
46 |
|
47 | async getUsernameAndPassword () {
|
48 | let username = this.options.username || process.env.SGCLOUD_USER
|
49 | let password = this.options.password || process.env.SGCLOUD_PASS
|
50 |
|
51 | const inquirerPrompt = []
|
52 | if (!username) {
|
53 | const usernamePromptOptions = { type: 'input', name: 'username', message: 'Enter your email address:' }
|
54 | const previousUsername = await this.userSettings.getUsername()
|
55 | if (previousUsername !== undefined) {
|
56 | usernamePromptOptions.default = previousUsername
|
57 | }
|
58 | inquirerPrompt.push(usernamePromptOptions)
|
59 | }
|
60 | if (!password) inquirerPrompt.push({ type: 'password', name: 'password', message: 'Enter your password:' })
|
61 |
|
62 | if (inquirerPrompt.length) {
|
63 | const answers = await inquirer.prompt(inquirerPrompt)
|
64 | return {
|
65 | username: answers.username || username,
|
66 | password: answers.password || password
|
67 | }
|
68 | }
|
69 |
|
70 | return {
|
71 | username, password
|
72 | }
|
73 | }
|
74 | }
|
75 |
|
76 | module.exports = LoginAction
|