Judd: implement ratelimit on /post route

This commit is contained in:
kittentm 2026-03-22 18:01:18 +01:00
commit e86743873c
No known key found for this signature in database
GPG key ID: AC43DFDBC1F44A91
3 changed files with 32 additions and 2 deletions

20
judd/package-lock.json generated
View file

@ -11,6 +11,7 @@
"dependencies": { "dependencies": {
"discord.js": "^14.25.1", "discord.js": "^14.25.1",
"express": "^4.18.2", "express": "^4.18.2",
"express-rate-limit": "^8.3.1",
"express-subdomain": "^1.0.5", "express-subdomain": "^1.0.5",
"joi": "^17.7.0", "joi": "^17.7.0",
"mongoose": "^6.7.1", "mongoose": "^6.7.1",
@ -2453,6 +2454,24 @@
"url": "https://opencollective.com/express" "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": { "node_modules/express-subdomain": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/express-subdomain/-/express-subdomain-1.0.6.tgz", "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", "resolved": "https://registry.npmjs.org/pg/-/pg-8.18.0.tgz",
"integrity": "sha512-xqrUDL1b9MbkydY/s+VZ6v+xiMUmOUk7SS9d/1kpyQxoJ6U9AO1oIJyUWVZojbfe5Cc/oluutcgFG4L9RDP1iQ==", "integrity": "sha512-xqrUDL1b9MbkydY/s+VZ6v+xiMUmOUk7SS9d/1kpyQxoJ6U9AO1oIJyUWVZojbfe5Cc/oluutcgFG4L9RDP1iQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"pg-connection-string": "^2.11.0", "pg-connection-string": "^2.11.0",
"pg-pool": "^3.11.0", "pg-pool": "^3.11.0",

View file

@ -13,6 +13,7 @@
"dependencies": { "dependencies": {
"discord.js": "^14.25.1", "discord.js": "^14.25.1",
"express": "^4.18.2", "express": "^4.18.2",
"express-rate-limit": "^8.3.1",
"express-subdomain": "^1.0.5", "express-subdomain": "^1.0.5",
"joi": "^17.7.0", "joi": "^17.7.0",
"mongoose": "^6.7.1", "mongoose": "^6.7.1",

View file

@ -1,4 +1,5 @@
const router = require('express').Router(); const router = require('express').Router();
const rateLimit = require('express-rate-limit');
const titles = require('../titles'); const titles = require('../titles');
const { WebhookClient, EmbedBuilder } = require('discord.js'); const { WebhookClient, EmbedBuilder } = require('discord.js');
const lookup = require('./ids.json'); const lookup = require('./ids.json');
@ -6,7 +7,17 @@ const blacklist = require('./blacklist.json');
const webhookClient = new WebhookClient({ url: process.env.WEBHOOK_URL }); 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]; const title = titles[request.titleCode];
if (!title) { if (!title) {