Web API for code.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

30 строки
790 B

  1. import { hash, genSalt, compare } from 'bcrypt'
  2. import { AppError } from 'src/packages/fastify-compliant-http-errors'
  3. export class PasswordNotEqualAssertError extends AppError {
  4. }
  5. export interface PasswordService {
  6. hash(password: string): Promise<string>;
  7. assertEqual(password: string, hashedPassword: string): Promise<void>;
  8. }
  9. export class PasswordServiceImpl implements PasswordService {
  10. constructor(private readonly saltRounds = 12) {
  11. }
  12. async hash(password: string): Promise<string> {
  13. const salt = await genSalt(this.saltRounds)
  14. return hash(password, salt)
  15. }
  16. async assertEqual(password: string, hashedPassword: string): Promise<void> {
  17. const result = await compare(password, hashedPassword)
  18. if (result) {
  19. return
  20. }
  21. throw new PasswordNotEqualAssertError()
  22. }
  23. }