/
update-password.js
68 lines (57 loc) 路 1.85 KB
/
update-password.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
/* eslint-disable consistent-return */
'use strict'
const consola = require('consola')
const { fetcher } = require('../utils')
const { Command } = require('@oclif/command')
const inquirer = require('inquirer')
const config = require('../config')
const { isPasswordValid, arePasswordEquals } = require('../validator')
class UpdatePasswordCommand extends Command {
async run() {
const user = config.get('user')
const accessToken = config.get('accessToken')
if (!user || !accessToken) {
consola.error(
'User is not authenticated. Use login command to start a new session.'
)
return
}
const { oldPassword, newPassword } = await inquirer.prompt([
{ name: 'oldPassword', message: 'Enter old password', type: 'password' },
{
name: 'newPassword',
message: 'Enter new password',
type: 'password',
validate: isPasswordValid
}
])
await inquirer.prompt([
{
name: 'confirmPassword',
message: 'Confirm new password',
type: 'password',
validate: value => arePasswordEquals(value, newPassword)
}
])
if (oldPassword === newPassword) {
consola.error('New password must be different from old password')
return
}
consola.info(`Updating password for user ${user}`)
const env = config.get('env') || 'prod'
const url = `${config.get(
`services.${env}.accounts.url`
)}/users/me/password`
const json = { newPassword, oldPassword }
const body = JSON.stringify(json)
return fetcher(url, 'PUT', accessToken, body).then(res => {
if (!res.ok) {
consola.error(`Error updating user password: ${res.status}`)
return
}
consola.success('User password updated')
})
}
}
UpdatePasswordCommand.description = 'Update user password'
module.exports = UpdatePasswordCommand