|
@@ -0,0 +1,24 @@
|
|
|
|
|
+function handleAPIRequest(req, res) {
|
|
|
|
|
+ // Implement rate limiting to prevent abuse
|
|
|
|
|
+ const rateLimit = 100; // requests per minute
|
|
|
|
|
+ const windowMs = 60 * 1000; // 1 minute in milliseconds
|
|
|
|
|
+ const now = Date.now();
|
|
|
|
|
+ const windowStart = now - windowMs;
|
|
|
|
|
+
|
|
|
|
|
+ // Initialize or get the request count for this IP
|
|
|
|
|
+ let requestCount = req.ipRequestCounts.get(req.ip) || 0;
|
|
|
|
|
+
|
|
|
|
|
+ // Filter out requests that are outside the current window
|
|
|
|
|
+ req.ipRequestCounts.set(req.ip, requestCount.filter(timestamp => timestamp > windowStart).length);
|
|
|
|
|
+
|
|
|
|
|
+ // Check if the request count exceeds the rate limit
|
|
|
|
|
+ if (requestCount >= rateLimit) {
|
|
|
|
|
+ res.status(429).send('Too many requests, please try again later.');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Add the current request timestamp
|
|
|
|
|
+ req.ipRequestCounts.set(req.ip, [...req.ipRequestCounts.get(req.ip), now]);
|
|
|
|
|
+
|
|
|
|
|
+ processRequest(req, res);
|
|
|
|
|
+}
|