feat(api): merkezi rate limiting sistemi ekle
Yeni rate-limiter middleware modülü oluşturuldu. loginLimiter (5 istek/dakika), apiLimiter (30 istek/dakika) ve uploadLimiter (10 istek/dakika) tanımlandı. Auth, loop, timer ve torrent rotalarına rate limiting uygulandı. Torrent rotalarında SHA-1 hash validasyonu eklendi.
This commit is contained in:
@@ -4,6 +4,7 @@ import { readDb, writeDb } from "../storage/jsondb";
|
||||
import { TimerRule } from "../types";
|
||||
import { nowIso } from "../utils/time";
|
||||
import { z } from "zod";
|
||||
import { apiLimiter } from "../middleware/rate-limiter";
|
||||
|
||||
const router = Router();
|
||||
|
||||
@@ -17,7 +18,7 @@ router.get("/rules", async (_req, res) => {
|
||||
res.json(db.timerRules ?? []);
|
||||
});
|
||||
|
||||
router.post("/rules", async (req, res) => {
|
||||
router.post("/rules", apiLimiter, async (req, res) => {
|
||||
const parsed = ruleSchema.safeParse(req.body);
|
||||
if (!parsed.success) {
|
||||
return res.status(400).json({ error: parsed.error.flatten() });
|
||||
@@ -34,7 +35,7 @@ router.post("/rules", async (req, res) => {
|
||||
res.json(rule);
|
||||
});
|
||||
|
||||
router.delete("/rules/:ruleId", async (req, res) => {
|
||||
router.delete("/rules/:ruleId", apiLimiter, async (req, res) => {
|
||||
const db = await readDb();
|
||||
const next = (db.timerRules ?? []).filter((rule) => rule.id !== req.params.ruleId);
|
||||
if (next.length === (db.timerRules ?? []).length) {
|
||||
|
||||
Reference in New Issue
Block a user