summary refs log tree commit diff
path: root/src/api/routes
diff options
context:
space:
mode:
authorTheArcaneBrony <myrainbowdash949@gmail.com>2022-09-18 14:09:16 +0200
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-12-19 22:17:06 +1100
commitbdda215005b57312512e08cbbdad1286e372c1b7 (patch)
tree13cf4847dfa9b497d6b3b7d6716f73b5917c1795 /src/api/routes
parentRegistration tokens (diff)
downloadserver-bdda215005b57312512e08cbbdad1286e372c1b7.tar.xz
Message rate limiting
Diffstat (limited to 'src/api/routes')
-rw-r--r--src/api/routes/channels/#channel_id/messages/index.ts23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/api/routes/channels/#channel_id/messages/index.ts b/src/api/routes/channels/#channel_id/messages/index.ts
index 4b935f19..86864edb 100644
--- a/src/api/routes/channels/#channel_id/messages/index.ts
+++ b/src/api/routes/channels/#channel_id/messages/index.ts
@@ -6,6 +6,7 @@ import {
 	Config,
 	DmChannelDTO,
 	emitEvent,
+	FieldErrors,
 	getPermission,
 	Message,
 	MessageCreateEvent,
@@ -16,10 +17,13 @@ import {
 	MessageCreateSchema,
 	ReadState,
 	DiscordApiErrors,
+	getRights,
+	Rights,
 } from "@fosscord/util";
 import { HTTPError } from "lambert-server";
-import { handleMessage, postHandleMessage, route } from "@fosscord/api";
+import { handleMessage, postHandleMessage, route, getIpAdress } from "@fosscord/api";
 import multer from "multer";
+import { yellow } from "picocolors";
 import { FindManyOptions, LessThan, MoreThan } from "typeorm";
 import { URL } from "url";
 
@@ -215,6 +219,23 @@ router.post(
 			}
 		}
 
+		if (!req.rights.has(Rights.FLAGS.BYPASS_RATE_LIMITS)) {
+			var limits = Config.get().limits;
+			if (limits.absoluteRate.register.enabled) {
+				const count = await Message.count({
+					where: {
+						channel_id,
+						timestamp: MoreThan(new Date(Date.now() - limits.absoluteRate.sendMessage.window))
+					}
+				});
+
+				if (count >= limits.absoluteRate.sendMessage.limit)
+					throw FieldErrors({
+						channel_id: { code: "TOO_MANY_MESSAGES", message: req.t("common:toomany.MESSAGE") }
+					});
+			}
+		}
+
 		const files = (req.files as Express.Multer.File[]) ?? [];
 		for (var currFile of files) {
 			try {