Files
nuxt-frontend/server/utils/password-reset-token.ts

40 lines
1.2 KiB
TypeScript

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 baseUrl URL pública usada para abrir a tela de redefinição.
* @param token Token bruto de recuperação.
* @returns URL completa (ou fallback relativo) com o token.
*/
export function buildPasswordResetPreviewUrl(baseUrl: string, token: string): string {
try {
const url = new URL('/auth/reset-password', baseUrl)
url.searchParams.set('token', token)
return url.toString()
} catch {
return `/auth/reset-password?token=${encodeURIComponent(token)}`
}
}