40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { BaseCommand, args } from '@adonisjs/core/ace'
|
||
import type { CommandOptions } from '@adonisjs/core/types/ace'
|
||
|
||
export default class UserPassword extends BaseCommand {
|
||
static commandName = 'user:password'
|
||
static description = 'Changer le mot de passe d’un compte'
|
||
|
||
static options: CommandOptions = {
|
||
startApp: true,
|
||
}
|
||
|
||
@args.string({ description: 'Identifiant du compte' })
|
||
declare username: string
|
||
|
||
async run() {
|
||
const { default: User } = await import('#models/user')
|
||
|
||
const user = await User.findBy('username', this.username)
|
||
if (!user) {
|
||
this.logger.error(`Compte « ${this.username} » introuvable.`)
|
||
this.exitCode = 1
|
||
return
|
||
}
|
||
|
||
const password = await this.prompt.secure('Nouveau mot de passe (12 caractères minimum)', {
|
||
validate: (value) => value.length >= 12 || 'Au moins 12 caractères',
|
||
})
|
||
const confirmation = await this.prompt.secure('Confirme le mot de passe')
|
||
if (password !== confirmation) {
|
||
this.logger.error('Les mots de passe ne correspondent pas.')
|
||
this.exitCode = 1
|
||
return
|
||
}
|
||
|
||
user.password = password
|
||
await user.save()
|
||
this.logger.success('Mot de passe changé.')
|
||
}
|
||
}
|