refactor: update AbacatePay webhook auth to use query param secret

- Replaced signature-based verification with secret validation using webhookSecret query parameter for improved compatibility
- Added CORS headers in next.config.ts for webhook API routes to handle external requests from varying IPs
- Updated abacatepay.ts verifyWebhookSignature method for backward compatibility, now delegating validation to route handler
This commit is contained in:
Evandro Fonseca Junior committed 2025-10-26 21:53:39 -03:00
1 parent 9e86b187e1
commit 634a5bc40b
3 files changed
+34 -9

No files matched your search

+11 -6
View File
@@ -4,15 +4,20 @@ import { abacatePay } from "@/lib/abacatepay";
export async function POST(request: NextRequest) {
try {
const payload = await request.text();
const signature = request.headers.get("x-abacatepay-signature");
if (!signature || !abacatePay.verifyWebhookSignature(payload, signature)) {
return NextResponse.json(
{ error: "Assinatura inválida" },
{ status: 401 }
);
// AbacatePay envia webhookSecret como query param
const { searchParams } = new URL(request.url);
const webhookSecret = searchParams.get("webhookSecret");
const expectedSecret = process.env.ABACATEPAY_WEBHOOK_SECRET;
// Validar secret
if (!webhookSecret || !expectedSecret || webhookSecret !== expectedSecret) {
console.error("🔒 Webhook rejeitado: secret inválido ou ausente");
return NextResponse.json({ error: "Secret inválido" }, { status: 401 });
}
console.log("✅ Webhook autenticado com sucesso");
const event = JSON.parse(payload);
console.log("🔔 Webhook recebido:", JSON.stringify(event, null, 2));