Files
KalBot/app/api/captcha/route.js

37 lines
1021 B
JavaScript

import svgCaptcha from 'svg-captcha';
import { NextResponse } from 'next/server';
import crypto from 'crypto';
// Prevent Next.js from evaluating this route at build time
export const dynamic = 'force-dynamic';
export async function GET() {
const captcha = svgCaptcha.create({
size: 5,
ignoreChars: '0o1i',
noise: 2,
color: true,
background: '#f3f4f6'
});
const text = captcha.text.toLowerCase();
const secret = process.env.CAPTCHA_SECRET || 'dev_secret_meow';
const hash = crypto.createHmac('sha256', secret).update(text).digest('hex');
const response = new NextResponse(captcha.data, {
headers: {
'Content-Type': 'image/svg+xml',
'Cache-Control': 'no-store, max-age=0'
}
});
// Store the expected hash in an HttpOnly cookie
response.cookies.set('captcha_hash', hash, {
httpOnly: true,
path: '/',
maxAge: 300 // 5 minutes validity
});
return response;
}