feat(auth): implementa logica de recuperacao e mudanca de senha
This commit is contained in:
39
server/utils/password-reset-token.ts
Normal file
39
server/utils/password-reset-token.ts
Normal 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)}`
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user