refactor: reset admin password (#1335)

* refactor: reset-admin-password

* chore: docs
This commit is contained in:
Jason Rasmussen
2023-01-16 13:09:04 -05:00
committed by GitHub
parent 5a6a726014
commit 1e2f02613f
8 changed files with 100 additions and 40 deletions

View File

@@ -1,37 +1,38 @@
import { Inject } from '@nestjs/common';
import { UserResponseDto, UserService } from '@app/domain';
import { Command, CommandRunner, InquirerService, Question, QuestionSet } from 'nest-commander';
import { randomBytes } from 'node:crypto';
import { IUserRepository, UserCore } from '@app/domain';
@Command({
name: 'reset-admin-password',
description: 'Reset the admin password',
})
export class ResetAdminPasswordCommand extends CommandRunner {
userCore: UserCore;
constructor(private readonly inquirer: InquirerService, @Inject(IUserRepository) userRepository: IUserRepository) {
constructor(private userService: UserService, private readonly inquirer: InquirerService) {
super();
this.userCore = new UserCore(userRepository);
}
async run(): Promise<void> {
const user = await this.userCore.getAdmin();
if (!user) {
console.log('Unable to reset password: no admin user.');
return;
}
const ask = (admin: UserResponseDto) => {
const { id, oauthId, email, firstName, lastName } = admin;
console.log(`Found Admin:
- ID=${id}
- OAuth ID=${oauthId}
- Email=${email}
- Name=${firstName} ${lastName}`);
const { password: providedPassword } = await this.inquirer.ask<{ password: string }>('prompt-password', undefined);
const password = providedPassword || randomBytes(24).toString('base64').replace(/\W/g, '');
return this.inquirer.ask<{ password: string }>('prompt-password', undefined).then(({ password }) => password);
};
await this.userCore.updateUser(user, user.id, { password });
try {
const { password, provided } = await this.userService.resetAdminPassword(ask);
if (providedPassword) {
console.log('The admin password has been updated.');
} else {
console.log(`The admin password has been updated to:\n${password}`);
if (provided) {
console.log(`The admin password has been updated.`);
} else {
console.log(`The admin password has been updated to:\n${password}`);
}
} catch (error) {
console.error(error);
console.error('Unable to reset admin password');
}
}
}