mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-11-13 15:09:20 +01:00
feat: implement rate limits for downloads and info requests
This commit is contained in:
@@ -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,
|
||||||
|
};
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
Reference in New Issue
Block a user