Compare commits

..

3 Commits

Author SHA1 Message Date
AyrisAI
083bc5f546 Remove specific keyword filtering for notifications 2026-05-14 19:10:11 +03:00
AyrisAI
add1876c11 Remove IMAP fallback and clean up webhook logic 2026-05-14 19:09:44 +03:00
AyrisAI
c331162704 Move webhook secret to .env for better security 2026-05-14 19:09:09 +03:00

View File

@@ -1,11 +1,9 @@
import { NextResponse } from 'next/server'; import { NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma'; import { prisma } from '@/lib/prisma';
import { getLatestEmail } from '@/lib/mail';
import { sendTelegramNotification } from '@/lib/notifications'; import { sendTelegramNotification } from '@/lib/notifications';
// Bu kısım normalde .env içinde olmalı // Bu kısım normalde .env içinde olmalı
const WEBHOOK_SECRET = 'besiktasK1903*'; const WEBHOOK_SECRET = process.env.WEBHOOK_SIGNAL_SECRET || 'besiktasK1903*';
const IMAP_PASSWORD = process.env.MAILCOW_MASTER_PASSWORD || ''; // Dovecot Master Password tavsiye edilir
// RFC 2047 Decode Fonksiyonu // RFC 2047 Decode Fonksiyonu
function decodeMimeText(text: string) { function decodeMimeText(text: string) {
@@ -56,52 +54,27 @@ export async function POST(request: Request) {
} }
// 2. Mail İçeriğini Belirle // 2. Mail İçeriğini Belirle
let mailData = null; if (!incomingSubject && !incomingSnippet) {
console.log(`[Signal] İçerik eksik, işlem durduruldu: ${to}`);
return NextResponse.json({ success: true, message: 'No content provided' });
}
if (incomingSubject || incomingSnippet) { const mailData = {
console.log(`[Signal] İçerik worker'dan hazır geldi: ${subject}`);
mailData = {
subject: subject || "(Konu Yok)", subject: subject || "(Konu Yok)",
text: incomingSnippet || "", text: incomingSnippet || "",
from: incomingFrom || "Bilinmiyor" from: incomingFrom || "Bilinmiyor"
}; };
} else {
console.log("[Signal] İçerik eksik, IMAP'e gidiliyor...");
mailData = await getLatestEmail(to, IMAP_PASSWORD);
}
if (!mailData) { // 3. Bildirim Gönder (Telegram)
console.error(`[Signal] Mail içeriği çekilemedi: ${to}`);
return NextResponse.json({ success: false, error: 'Could not fetch mail' }, { status: 500 });
}
// 3. İçerik Analizi (BMW, Penti vb.)
let processed = false;
let extraInfo = "";
const analysisContent = (mailData.subject + " " + mailData.text).toLowerCase();
if (analysisContent.includes("bmw") || analysisContent.includes("tamir")) {
console.log("🚗 [Signal] BMW/Tamir içerikli mail tespit edildi!");
extraInfo = "🚗 BMW/Tamir İlgili İçerik";
processed = true;
}
if (analysisContent.includes("penti") || analysisContent.includes("sipariş")) {
console.log("🛍️ [Signal] Penti/Sipariş içerikli mail tespit edildi!");
extraInfo = "🛍️ Penti/Sipariş İlgili İçerik";
processed = true;
}
// 4. Bildirim Gönder (Telegram)
const notificationResult = await sendTelegramNotification( const notificationResult = await sendTelegramNotification(
mapping.userId, mapping.userId,
to, to,
mailData.from, mailData.from,
mailData.subject, mailData.subject,
extraInfo "" // Analiz bilgisini kaldırdık
); );
// 5. Bildirim Logu // 4. Bildirim Logu
await prisma.notificationLog.create({ await prisma.notificationLog.create({
data: { data: {
mailbox: to, mailbox: to,
@@ -109,16 +82,14 @@ export async function POST(request: Request) {
subject: mailData.subject, subject: mailData.subject,
status: notificationResult.status, status: notificationResult.status,
userId: mapping.userId, userId: mapping.userId,
error: notificationResult.error || (processed ? null : "Anahtar kelime eşleşmedi") error: notificationResult.error
} }
}); });
return NextResponse.json({ return NextResponse.json({
success: true, success: true,
processed,
notification: notificationResult.status, notification: notificationResult.status,
subject: mailData.subject, subject: mailData.subject
mode: incomingSubject ? 'worker-data' : 'imap-fallback'
}); });
} catch (error: any) { } catch (error: any) {