/
client-token.js
101 lines (83 loc) 路 2.67 KB
/
client-token.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
/* eslint-disable consistent-return */
'use strict'
const consola = require('consola')
const {
fetcher,
formatErrorResponse,
formatOutput
} = require('../utils')
const inquirer = require('inquirer')
const { Command, flags } = require('@oclif/command')
const config = require('../config')
const { coppyToClipboard } = require('../utils')
class ClientTokenCommand extends Command {
async run() {
const user = config.get('user')
const accessToken = config.get('accessToken')
const { flags } = this.parse(ClientTokenCommand)
const isJson = typeof flags.json !== 'undefined'
const clientId = config.get('clientId')
const clientSecret = config.get('clientSecret')
if (!clientId || !clientSecret) {
formatErrorResponse(
isJson,
'You must provide a valid client-keys pair in order to create a client token'
)
!isJson &&
consola.info(
'To create a new client-keys pair run: bcl client-keys create'
)
return
}
!isJson && consola.info(`Retrieving new client accessToken for ${user}`)
const { save } = await inquirer.prompt([
{
name: 'save',
message:
'Do you want bcl to store your tokens locally for future usage?',
type: 'confirm',
when: () => !flags.json
}
])
const env = config.get('env') || 'prod'
const url = `${config.get(`services.${env}.accounts.url`)}/auth/token`
const body = JSON.stringify({
grantType: 'clientCredentials',
clientId,
clientSecret
})
return fetcher(url, 'POST', accessToken, body).then(res => {
if (!res.ok) {
if (res.status === 401 || res.status === 403) {
formatErrorResponse(isJson, 'Your client keys are invalid')
return
}
formatErrorResponse(
isJson,
`Error generating client accessToken: ${res.status}`
)
return
}
if (!res.data.accessToken || !res.data.refreshToken) {
formatErrorResponse(isJson, 'Error generating client accessToken.')
return
}
!isJson && consola.success('Generated new tokens:\n')
const data = {
accessToken: res.data.accessToken,
refreshToken: res.data.refreshToken
}
formatOutput(isJson, data)
if (save) {
config.set('clientAccessToken', data.accessToken)
config.set('refreshToken', data.refreshToken)
}
coppyToClipboard(data.accessToken, 'Client access token')
})
}
}
ClientTokenCommand.description = 'Generate new client token(s)'
ClientTokenCommand.flags = {
json: flags.boolean({ char: 'j', description: 'JSON output' })
}
module.exports = ClientTokenCommand