Web API for code.
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

Password.service.ts 790 B

1234567891011121314151617181920212223242526272829
  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. }