diff --git a/server/helpers/rateLimit.helpers.js b/server/helpers/rateLimit.helpers.js index e3d57a3..d3ec09c 100644 --- a/server/helpers/rateLimit.helpers.js +++ b/server/helpers/rateLimit.helpers.js @@ -1,6 +1,5 @@ const RateLimit = require("express-rate-limit"); - /** * Rate limiter middleware used to protect public endpoints * against abusive or excessive requests. @@ -15,10 +14,29 @@ const RateLimit = require("express-rate-limit"); const rateLimit = RateLimit({ windowMs: 15 * 60 * 1000, // 15 minutes max: 5, - message: "Too many requests, please try again later.", - statusCode: 429, + message: {error: {code: "RATE_LIMITED", message: "Too many requests, please try again later."}}, + standardHeaders: true, + legacyHeaders: false, +}); + +const downloadRateLimit = RateLimit({ + windowMs: 15 * 60 * 1000, // 15 minutes + max: 100, + message: {error: {code: "RATE_LIMITED", message: "Too many download requests, please try again later."}}, + standardHeaders: true, + legacyHeaders: false, +}); + +const infoRateLimit = RateLimit({ + windowMs: 60 * 1000, // 1 minute + max: 60, + message: {error: {code: "RATE_LIMITED", message: "Too many info requests, please try again later."}}, + standardHeaders: true, + legacyHeaders: false, }); module.exports = { - rateLimit -} \ No newline at end of file + rateLimit, + downloadRateLimit, + infoRateLimit, +}; \ No newline at end of file diff --git a/server/routes/download.route.js b/server/routes/download.route.js index 1d814f6..9a31269 100644 --- a/server/routes/download.route.js +++ b/server/routes/download.route.js @@ -1,9 +1,17 @@ const express = require("express"); const router = express.Router(); -const { downloadController, progressController, speedController, stageController, cancelDownloadController, playlistInfoController } = require("../controller/download.controller"); +const { + downloadController, + progressController, + speedController, + stageController, + cancelDownloadController, + playlistInfoController, +} = require("../controller/download.controller"); +const {downloadRateLimit} = require("../helpers/rateLimit.helpers"); -router.post("/", downloadController); -router.post("/cancel", cancelDownloadController); +router.post("/", downloadRateLimit, downloadController); +router.post("/cancel", downloadRateLimit, cancelDownloadController); // SSE for download progress router.get("/progress", progressController); diff --git a/server/routes/info.route.js b/server/routes/info.route.js index 8e7de75..d18d0c7 100644 --- a/server/routes/info.route.js +++ b/server/routes/info.route.js @@ -1,7 +1,9 @@ const express = require("express"); const router = express.Router(); const { infoController } = require("../controller/info.controller"); +const {infoRateLimit} = require("../helpers/rateLimit.helpers"); -router.get("/", infoController); +router.get("/", infoRateLimit, infoController); +router.post("/", infoRateLimit, infoController); module.exports = router; \ No newline at end of file