changeset 6404:a1df76ba4f68

mod_block_registrations: Add username length requirements
author Kim Alvefur <zash@zash.se>
date Sat, 14 Feb 2026 12:57:22 +0100
parents 13c61a068c71
children cdb9c2616c05
files mod_block_registrations/README.md mod_block_registrations/mod_block_registrations.lua
diffstat 2 files changed, 15 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/mod_block_registrations/README.md	Wed Feb 11 09:40:30 2026 +0000
+++ b/mod_block_registrations/README.md	Sat Feb 14 12:57:22 2026 +0100
@@ -19,12 +19,14 @@
 
 You can then set some options to configure your desired policy:
 
-  Option                         Default             Description
-  ------------------------------ ------------------- -----------------------------------------------------------------------------------------------------------------------------------------------
-  block_registrations_users      *See source code*   A list of reserved usernames
-  block_registrations_matching   `{ }`               A list of [Lua patterns](http://www.lua.org/manual/5.1/manual.html#5.4.1) matching reserved usernames (slower than block_registrations_users)
-  block_registrations_require    `nil`               A pattern that registered user accounts MUST match to be allowed
-  block_registrations_confusable `true`              Block usernames that look similar to the reserved usernames (requires Prosody be built with ICU)
+  Option                               Default             Description
+  ------------------------------------ ------------------- -----------------------------------------------------------------------------------------------------------------------------------------------
+  block_registrations_users            *See source code*   A list of reserved usernames
+  block_registrations_matching         `{ }`               A list of [Lua patterns](http://www.lua.org/manual/5.1/manual.html#5.4.1) matching reserved usernames (slower than block_registrations_users)
+  block_registrations_require          `nil`               A pattern that registered user accounts MUST match to be allowed
+  block_registrations_confusable       `true`              Block usernames that look similar to the reserved usernames (requires Prosody be built with ICU)
+  block_registrations_length_minimum   `1`                 Block usernames that are shorter than the given length
+  block_registrations_length_maximum   `255`               Block usernames that are longer than the given length
 
 Some examples:
 
--- a/mod_block_registrations/mod_block_registrations.lua	Wed Feb 11 09:40:30 2026 +0000
+++ b/mod_block_registrations/mod_block_registrations.lua	Sat Feb 14 12:57:22 2026 +0100
@@ -1,4 +1,5 @@
 local nodeprep = require "util.encodings".stringprep.nodeprep;
+local it = require "util.iterators";
 
 local normal = nodeprep;
 if module:get_option_boolean("block_registrations_confusable", true) then
@@ -26,11 +27,17 @@
 }) / normal;
 local block_patterns = module:get_option_set("block_registrations_matching", {});
 local require_pattern = module:get_option_string("block_registrations_require");
+local length_min = module:get_option_number("block_registrations_length_minimum", 1);
+local length_max = module:get_option_number("block_registrations_length_maximum", 255);
 
 function is_blocked(username)
 	-- Check if the username is simply blocked
 	if block_users:contains(username) then return true; end
 
+	-- Check how long the username is (Unicode characters)
+	local length = it.count(username:gmatch("[\000-\127\194-\253][\128-\191]*"));
+	if length < length_min or length > length_max then return true; end
+
 	local normalized_username = normal(username);
 	if block_users:contains(normalized_username) then return true; end