feat(auth): implementa logica de recuperacao e mudanca de senha

This commit is contained in:
2026-04-14 20:31:19 -05:00
parent 11dc1266a2
commit 5fc265f3dc
11 changed files with 300 additions and 3 deletions

View File

@@ -0,0 +1,39 @@
import { createHash, randomBytes } from 'node:crypto'
/**
* Gera hash seguro para token de recuperação usando pepper do servidor.
*
* @param rawToken Token bruto entregue ao cliente.
* @param pepper Segredo adicional do ambiente.
* @returns Hash SHA-256 do token.
*/
export function hashPasswordResetToken(rawToken: string, pepper: string): string {
return createHash('sha256').update(`${rawToken}${pepper}`).digest('hex')
}
/**
* Gera token aleatório para o fluxo de recuperação de senha.
*
* @returns Token em formato URL-safe.
*/
export function generateRawPasswordResetToken(): string {
return randomBytes(32).toString('base64url')
}
/**
* Monta uma URL de preview para facilitar testes locais sem SMTP.
*
* @param issuer Base do serviço de auth.
* @param token Token bruto de recuperação.
* @returns URL completa (ou fallback relativo) com o token.
*/
export function buildPasswordResetPreviewUrl(issuer: string, token: string): string {
try {
const url = new URL('/auth/reset-password', issuer)
url.searchParams.set('token', token)
return url.toString()
} catch {
return `/auth/reset-password?token=${encodeURIComponent(token)}`
}
}