mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	refactor: reset admin password (#1335)
* refactor: reset-admin-password * chore: docs
This commit is contained in:
		| @@ -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'); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user