portfolio/server/utils/auth.ts

35 lines
822 B
TypeScript

import { nanoid } from 'nanoid'
import { getHeader, createError } from 'h3'
const tokens = new Map<string, number>()
const TOKEN_TTL = 24 * 60 * 60 * 1000
export function createToken(): string {
const token = nanoid(32)
tokens.set(token, Date.now() + TOKEN_TTL)
return token
}
export function validateToken(token: string | undefined): boolean {
if (!token) return false
const expiry = tokens.get(token)
if (!expiry) return false
if (Date.now() > expiry) {
tokens.delete(token)
return false
}
return true
}
export function removeToken(token: string): void {
tokens.delete(token)
}
export function requireAuth(event: any): void {
const token = getHeader(event, 'x-auth-token')
if (!validateToken(token)) {
throw createError({ statusCode: 401, statusMessage: 'Unauthorized' })
}
}