feat: implement rate limits for downloads and info requests

This commit is contained in:
MasterAcnolo
2026-10-28 21:43:31 +01:00
parent 0da6df03cb
commit fbe30f7ee2
3 changed files with 37 additions and 9 deletions

View File

@@ -1,6 +1,5 @@
const RateLimit = require("express-rate-limit"); const RateLimit = require("express-rate-limit");
/** /**
* Rate limiter middleware used to protect public endpoints * Rate limiter middleware used to protect public endpoints
* against abusive or excessive requests. * against abusive or excessive requests.
@@ -15,10 +14,29 @@ const RateLimit = require("express-rate-limit");
const rateLimit = RateLimit({ const rateLimit = RateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes windowMs: 15 * 60 * 1000, // 15 minutes
max: 5, max: 5,
message: "Too many requests, please try again later.", message: {error: {code: "RATE_LIMITED", message: "Too many requests, please try again later."}},
statusCode: 429, 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 = { module.exports = {
rateLimit rateLimit,
} downloadRateLimit,
infoRateLimit,
};

View File

@@ -1,9 +1,17 @@
const express = require("express"); const express = require("express");
const router = express.Router(); 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("/", downloadRateLimit, downloadController);
router.post("/cancel", cancelDownloadController); router.post("/cancel", downloadRateLimit, cancelDownloadController);
// SSE for download progress // SSE for download progress
router.get("/progress", progressController); router.get("/progress", progressController);

View File

@@ -1,7 +1,9 @@
const express = require("express"); const express = require("express");
const router = express.Router(); const router = express.Router();
const { infoController } = require("../controller/info.controller"); 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; module.exports = router;