UNPKG

1.71 kBJavaScriptView Raw
1const inquirer = require('inquirer')
2const logger = require('../logger')
3const DcHttpClient = require('../DcHttpClient')
4const UserSettings = require('../user/UserSettings')
5
6class LoginAction {
7 /**
8 * @param {Command} caporal
9 */
10 static register (caporal) {
11 caporal
12 .command('login')
13 .description('Login')
14 .option('--username [email]', 'Email address to login')
15 .option('--password [password]', 'Password to login')
16 .action((args, options) => new LoginAction().run(options, (err) => {
17 if (err) return logger.error(err.message)
18 logger.info('Login successful')
19 }))
20 }
21
22 /**
23 * @param {object} options
24 * @param {function} [cb]
25 */
26 run (options, cb) {
27 this.options = options
28
29 this.getUsernameAndPassword((err, username, password) => {
30 if (err) return cb(err)
31 new DcHttpClient(new UserSettings()).login(username, password, (err) => {
32 if (err) return cb(err)
33 cb()
34 })
35 })
36 }
37
38 /**
39 * @param {function} [cb]
40 */
41 getUsernameAndPassword (cb) {
42 let username = this.options.username || process.env.SGCLOUD_USER
43 let password = this.options.password || process.env.SGCLOUD_PASS
44
45 const inquirerPrompt = []
46 if (!username) inquirerPrompt.push({type: 'input', name: 'username', message: 'Enter your email address:'})
47 if (!password) inquirerPrompt.push({type: 'password', name: 'password', message: 'Enter your password:'})
48
49 if (inquirerPrompt.length) {
50 return inquirer.prompt(inquirerPrompt).then(answers => {
51 cb(null, answers.username || username, answers.password || password)
52 })
53 }
54
55 cb(null, username, password)
56 }
57}
58
59module.exports = LoginAction