summary refs log tree commit diff
path: root/src/middlewares/RateLimit.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/middlewares/RateLimit.ts')
-rw-r--r--src/middlewares/RateLimit.ts32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/middlewares/RateLimit.ts b/src/middlewares/RateLimit.ts

index 0858744a..c8fdeba2 100644 --- a/src/middlewares/RateLimit.ts +++ b/src/middlewares/RateLimit.ts
@@ -1,5 +1,5 @@ -import { db, MongooseCache, Bucket } from "@fosscord/server-util"; -import { IRouterHandler, NextFunction, Request, Response } from "express"; +import { db, MongooseCache, Bucket, Config } from "@fosscord/server-util"; +import { NextFunction, Request, Response, Router } from "express"; import { getIpAdress } from "../util/ipAddress"; import { API_PREFIX_TRAILING_SLASH } from "./Authentication"; @@ -65,7 +65,7 @@ export default function RateLimit(opts: { const global = bucket_id === "global"; if (resetAfterMs > 0) { - console.log("blocked", { resetAfterMs }); + console.log("blocked bucket: " + bucket_id, { resetAfterMs }); return ( res .status(429) @@ -105,6 +105,32 @@ export default function RateLimit(opts: { }; } +export function initRateLimits(app: Router) { + const { routes, global, ip, error } = Config.get().limits.rate; + + app.use( + RateLimit({ + bucket: "global", + onlyIp: true, + ...ip + }) + ); + app.use(RateLimit({ bucket: "global", ...global })); + app.use( + RateLimit({ + bucket: "error", + error: true, + onlyIp: true, + ...error + }) + ); + app.use("/guilds/:id", RateLimit(routes.guild)); + app.use("/webhooks/:id", RateLimit(routes.webhook)); + app.use("/channels/:id", RateLimit(routes.channel)); + app.use("/auth/login", RateLimit(routes.auth.login)); + app.use("/auth/register", RateLimit({ onlyIp: true, success: true, ...routes.auth.register })); +} + function hitRoute(opts: { user_id: string; bucket_id: string; max_hits: number; window: number }) { return db.collection("ratelimits").updateOne( { id: opts.bucket_id, user_id: opts.user_id },