Files
Webklar-Kundenbereich/server/services/staffPreviewTokens.js
T

36 lines
968 B
JavaScript

import { randomBytes } from 'node:crypto'
const TOKEN_TTL_MS = 60 * 1000
const tokens = new Map()
function purgeExpired() {
const now = Date.now()
for (const [key, entry] of tokens) {
if (entry.expiresAt <= now) tokens.delete(key)
}
}
export function createStaffPreviewToken(payload) {
purgeExpired()
const token = randomBytes(32).toString('hex')
tokens.set(token, {
...payload,
expiresAt: Date.now() + TOKEN_TTL_MS,
})
return token
}
/**
* Einmal einloesen. purpose trennt Preview-Links ('preview', Standard) von der Kundenansicht aus dem
* Ticketsystem ('kundenansicht'); ein Token fuer den falschen Zweck ist trotzdem verbraucht.
*/
export function consumeStaffPreviewToken(token, purpose = 'preview') {
purgeExpired()
const entry = tokens.get(token)
if (!entry) return null
tokens.delete(token)
if (entry.expiresAt <= Date.now()) return null
if ((entry.purpose || 'preview') !== purpose) return null
return entry
}