# HG changeset patch # User Kim Alvefur # Date 1771070242 -3600 # Node ID a1df76ba4f684096c8fda84af03d3cb4894d3dbd # Parent 13c61a068c7103485862e8b7c578c3f2c0b7ca76 mod_block_registrations: Add username length requirements diff -r 13c61a068c71 -r a1df76ba4f68 mod_block_registrations/README.md --- 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: diff -r 13c61a068c71 -r a1df76ba4f68 mod_block_registrations/mod_block_registrations.lua --- 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