|
@@ -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 { password: providedPassword } = await this.inquirer.ask<{ password: string }>('prompt-password', undefined);
|
|
|
- const password = providedPassword || randomBytes(24).toString('base64').replace(/\W/g, '');
|
|
|
-
|
|
|
- await this.userCore.updateUser(user, user.id, { password });
|
|
|
-
|
|
|
- if (providedPassword) {
|
|
|
- console.log('The admin password has been updated.');
|
|
|
- } else {
|
|
|
- console.log(`The admin password has been updated to:\n${password}`);
|
|
|
+ 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}`);
|
|
|
+
|
|
|
+ return this.inquirer.ask<{ password: string }>('prompt-password', undefined).then(({ password }) => password);
|
|
|
+ };
|
|
|
+
|
|
|
+ try {
|
|
|
+ const { password, provided } = await this.userService.resetAdminPassword(ask);
|
|
|
+
|
|
|
+ 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');
|
|
|
}
|
|
|
}
|
|
|
}
|