Changeset

4562:28c16c93d79a

mod_limits_exception: New module to except some JIDs from rate limiting
author Matthew Wild <mwild1@gmail.com>
date Mon, 24 May 2021 15:46:11 +0100
parents 4561:c6b740ccf6ec
children 4563:30f2d7c3f946
files mod_limits_exception/README.markdown mod_limits_exception/mod_limits_exception.lua
diffstat 2 files changed, 43 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_limits_exception/README.markdown	Mon May 24 15:46:11 2021 +0100
@@ -0,0 +1,26 @@
+---
+summary: Allow specified JIDs to bypass rate limits
+...
+
+This module allows you to configure a list of JIDs that should be allowed to
+bypass rate limit restrictions.
+
+It is designed for Prosody 0.11.x. Prosody 0.12.x supports this feature
+natively.
+
+## Configuration
+
+First, enable this module by adding `"limits_exception"` to your
+`modules_enabled` list.
+
+Next, configure a list of JIDs to exclude from rate limiting:
+
+```
+unlimited_jids = { "user1@example.com", "user2@example.net" }
+```
+
+## Compatibility
+
+Made for Prosody 0.11.x only.
+
+Using this module with Prosody trunk/0.12 may cause unexpected behaviour.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_limits_exception/mod_limits_exception.lua	Mon May 24 15:46:11 2021 +0100
@@ -0,0 +1,17 @@
+local unlimited_jids = module:get_option_inherited_set("unlimited_jids", {});
+
+if unlimited_jids:empty() then
+	return;
+end
+
+module:hook("authentication-success", function (event)
+	local session = event.session;
+	local jid = session.username .. "@" .. session.host;
+	if unlimited_jids:contains(jid) then
+		if session.conn and session.conn.setlimit then
+			session.conn:setlimit(0);
+		elseif session.throttle then
+			session.throttle = nil;
+		end
+	end
+end);