Mercurial > prosody-modules
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
