import { Database } from './database.js'; class CheckMilWare { constructor() { this.dbClient = new Database("AkenoXJs", "FastJsAPI"); } async handle(req, res, next) { try { const xForwardedFor = req.headers['x-forwarded-for']; const xRealIP = req.headers['x-real-ip']; const cfConnectingIP = req.headers['cf-connecting-ip']; let realIP = req.ip; if (xForwardedFor) { realIP = xForwardedFor.split(',')[0].trim(); } else if (xRealIP) { realIP = xRealIP; } else if (cfConnectingIP) { realIP = cfConnectingIP; } req.realIP = realIP; console.log(`Extracted Real IP: ${realIP}`); const isBlocked = await this.dbClient.CheckIsBlocked(realIP); if (isBlocked && isBlocked.blocked === true) { return res.status(403).send("Access denied: IP is blocked"); } if (req.path === '/.env') { console.log("Check path /env"); await this.dbClient.AddIpisBlocked(realIP); return res.status(403).send("Access denied: IP is blocked.."); } console.log(`Real IP address is: ${realIP}, header used: ${xForwardedFor ? "x-forwarded-for" : xRealIP ? "x-real-ip" : cfConnectingIP ? "cf-connecting-ip" : "req.ip"}`); next(); } catch (error) { console.error("Error in middleware: " + error); res.status(500).send("Something bad happened"); } } } export { CheckMilWare };