UNPKG

2.29 kBJavaScriptView Raw
1const inquirer = require('inquirer')
2const logger = require('../logger')
3
4class LoginAction {
5 /**
6 * @param {Command} caporal
7 * @param {AppSettings} appSettings
8 * @param {UserSettings} userSettings
9 * @param {DcHttpClient} dcHttpClient
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) /* istanbul ignore next */ {
21 logger.error(err.message)
22 return process.exit(1)
23 }
24 })
25 }
26
27 /**
28 * @param {UserSettings} userSettings
29 * @param {DcHttpClient} dcHttpClient
30 */
31 constructor (userSettings, dcHttpClient) {
32 this.userSettings = userSettings
33 this.dcHttpClient = dcHttpClient
34 }
35
36 /**
37 * @param {object} options
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
76module.exports = LoginAction