From e86743873cc992b2d183d5dda4b708716ed4d905 Mon Sep 17 00:00:00 2001 From: KittenTM Date: Sun, 22 Mar 2026 18:01:18 +0100 Subject: [PATCH] Judd: implement ratelimit on /post route --- judd/package-lock.json | 20 +++++++++++++++++++- judd/package.json | 1 + judd/routes/post.js | 13 ++++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/judd/package-lock.json b/judd/package-lock.json index 24e22ec..554cb78 100644 --- a/judd/package-lock.json +++ b/judd/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "discord.js": "^14.25.1", "express": "^4.18.2", + "express-rate-limit": "^8.3.1", "express-subdomain": "^1.0.5", "joi": "^17.7.0", "mongoose": "^6.7.1", @@ -2453,6 +2454,24 @@ "url": "https://opencollective.com/express" } }, + "node_modules/express-rate-limit": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", + "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", + "license": "MIT", + "dependencies": { + "ip-address": "10.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, "node_modules/express-subdomain": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/express-subdomain/-/express-subdomain-1.0.6.tgz", @@ -3075,7 +3094,6 @@ "resolved": "https://registry.npmjs.org/pg/-/pg-8.18.0.tgz", "integrity": "sha512-xqrUDL1b9MbkydY/s+VZ6v+xiMUmOUk7SS9d/1kpyQxoJ6U9AO1oIJyUWVZojbfe5Cc/oluutcgFG4L9RDP1iQ==", "license": "MIT", - "peer": true, "dependencies": { "pg-connection-string": "^2.11.0", "pg-pool": "^3.11.0", diff --git a/judd/package.json b/judd/package.json index 4db1adf..0dc7d3f 100644 --- a/judd/package.json +++ b/judd/package.json @@ -13,6 +13,7 @@ "dependencies": { "discord.js": "^14.25.1", "express": "^4.18.2", + "express-rate-limit": "^8.3.1", "express-subdomain": "^1.0.5", "joi": "^17.7.0", "mongoose": "^6.7.1", diff --git a/judd/routes/post.js b/judd/routes/post.js index 563be24..d3d77c1 100644 --- a/judd/routes/post.js +++ b/judd/routes/post.js @@ -1,4 +1,5 @@ const router = require('express').Router(); +const rateLimit = require('express-rate-limit'); const titles = require('../titles'); const { WebhookClient, EmbedBuilder } = require('discord.js'); const lookup = require('./ids.json'); @@ -6,7 +7,17 @@ const blacklist = require('./blacklist.json'); const webhookClient = new WebhookClient({ url: process.env.WEBHOOK_URL }); -router.post('/post', async (request, response, next) => { +const postLimiter = rateLimit({ + windowMs: 30 * 1000, + max: 1, + statusCode: 500, + message: 'ratelimited chi!!! slow ur roll bud', + standardHeaders: true, + legacyHeaders: false, + validate: { trustProxy: false }, +}); + +router.post('/post', postLimiter, async (request, response, next) => { const title = titles[request.titleCode]; if (!title) {