Spaces:
Paused
Paused
import { Database, db } from '../database/database.js'; | |
import { rateLimit } from 'express-rate-limit'; | |
import * as uuid from 'uuid'; | |
const myUUID = uuid.v4(); | |
const authenticateApiKey = async (req, res, next) => { | |
const apiKey = req.headers['x-api-key']; | |
if (!apiKey) { | |
return res.status(401).json({ error: 'API Key required' }); | |
} | |
try { | |
const keyDoc = await db('apiKeys').findOne({ key: apiKey }); | |
if (!keyDoc) { | |
return res.status(403).json({ error: 'Invalid API Key' }); | |
} | |
next(); | |
} catch (err) { | |
res.status(500).json({ error: 'Server error' }); | |
} | |
}; | |
const apiLimiter = rateLimit({ | |
windowMs: 15 * 60 * 1000, | |
max: 100, | |
keyGenerator: (req) => req.headers['x-api-key'], // Limit per API Key | |
message: 'Too many requests from this API Key' | |
}); | |
class CheckMilWare { | |
constructor() { | |
this.dbClient = new Database("AkenoXJs", "FastJsAPI"); | |
} | |
async handle(req, res, next) { | |
try { | |
delete req.headers["link"]; | |
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; | |
const isBlocked = await this.dbClient.CheckIsBlocked(realIP); | |
if (isBlocked && isBlocked.blocked) { | |
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} | |
path method: ${req.path} | |
method: ${req.method} | |
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, | |
authenticateApiKey, | |
apiLimiter, | |
myUUID | |
}; |