feat: captcha

This commit is contained in:
Face 2025-06-24 19:37:34 +03:00
parent b79ee0c08a
commit 9a99f934b6
12 changed files with 184 additions and 11 deletions

View file

@ -5,6 +5,8 @@ import { coin, userPortfolio, user, transaction, priceHistory } from '$lib/serve
import { eq, and, gte } from 'drizzle-orm';
import { redis } from '$lib/server/redis';
import { createNotification } from '$lib/server/notification';
import { verifyTurnstile } from '$lib/server/turnstile';
import { setTurnstileVerifiedRedis, isTurnstileVerifiedRedis } from '$lib/server/redis';
async function calculate24hMetrics(coinId: number, currentPrice: number) {
const twentyFourHoursAgo = new Date(Date.now() - 24 * 60 * 60 * 1000);
@ -53,7 +55,16 @@ export async function POST({ params, request }) {
}
const { coinSymbol } = params;
const { type, amount } = await request.json();
const { type, amount, turnstileToken } = await request.json();
const alreadyVerified = await isTurnstileVerifiedRedis(session.user.id);
if (!alreadyVerified) {
if (!turnstileToken || !(await verifyTurnstile(turnstileToken, request))) {
throw error(400, 'Captcha verification failed');
}
await setTurnstileVerifiedRedis(session.user.id);
}
if (!['BUY', 'SELL'].includes(type)) {
throw error(400, 'Invalid transaction type');