Mercurial > prosody-modules
annotate mod_block_registrations/mod_block_registrations.lua @ 6530:8e87fbbb6cd3
mod_muc_mav: Add module for XEP-0463: MUC Affiliations Versioning
| author | Marvin W <hg@larma.de> |
|---|---|
| date | Mon, 04 May 2026 20:55:39 +0200 |
| parents | a1df76ba4f68 |
| children |
| rev | line source |
|---|---|
|
1053
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local nodeprep = require "util.encodings".stringprep.nodeprep; |
|
6404
a1df76ba4f68
mod_block_registrations: Add username length requirements
Kim Alvefur <zash@zash.se>
parents:
6322
diff
changeset
|
2 local it = require "util.iterators"; |
|
1053
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 |
|
6322
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
4 local normal = nodeprep; |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
5 if module:get_option_boolean("block_registrations_confusable", true) then |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
6 local confusable = require "util.encodings".confusable; |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
7 if not confusable then |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
8 module:log("error", "Prosody not built with ICU, confusables mapping is unavailable."); |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
9 module:log("error", "Rebuild or disable this feature with 'block_registrations_confusable = false'"); |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
10 end |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
11 function normal(username) |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
12 if username then |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
13 username = nodeprep(username); |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
14 end |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
15 if username then |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
16 username = confusable.skeleton(username); |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
17 end |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
18 return username; |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
19 end |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
20 end |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
21 |
|
5065
368bf9b06484
mod_block_registrations: Expand default list of blocked usernames (RFC 2142)
Matthew Wild <mwild1@gmail.com>
parents:
1697
diff
changeset
|
22 local block_users = module:get_option_set("block_registrations_users", { |
|
368bf9b06484
mod_block_registrations: Expand default list of blocked usernames (RFC 2142)
Matthew Wild <mwild1@gmail.com>
parents:
1697
diff
changeset
|
23 "abuse", "admin", "administrator", "hostmaster", "info", "news", |
|
368bf9b06484
mod_block_registrations: Expand default list of blocked usernames (RFC 2142)
Matthew Wild <mwild1@gmail.com>
parents:
1697
diff
changeset
|
24 "noc", "operator", "owner", "postmaster", "register", "registration", |
|
368bf9b06484
mod_block_registrations: Expand default list of blocked usernames (RFC 2142)
Matthew Wild <mwild1@gmail.com>
parents:
1697
diff
changeset
|
25 "root", "security", "service", "signup", "support", "sysadmin", |
|
368bf9b06484
mod_block_registrations: Expand default list of blocked usernames (RFC 2142)
Matthew Wild <mwild1@gmail.com>
parents:
1697
diff
changeset
|
26 "sysop", "system", "test", "trouble", "webmaster", "www", "xmpp", |
|
6322
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
27 }) / normal; |
|
1053
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 local block_patterns = module:get_option_set("block_registrations_matching", {}); |
|
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 local require_pattern = module:get_option_string("block_registrations_require"); |
|
6404
a1df76ba4f68
mod_block_registrations: Add username length requirements
Kim Alvefur <zash@zash.se>
parents:
6322
diff
changeset
|
30 local length_min = module:get_option_number("block_registrations_length_minimum", 1); |
|
a1df76ba4f68
mod_block_registrations: Add username length requirements
Kim Alvefur <zash@zash.se>
parents:
6322
diff
changeset
|
31 local length_max = module:get_option_number("block_registrations_length_maximum", 255); |
|
1053
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
|
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 function is_blocked(username) |
|
6321
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
34 -- Check if the username is simply blocked |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
35 if block_users:contains(username) then return true; end |
|
1053
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 |
|
6404
a1df76ba4f68
mod_block_registrations: Add username length requirements
Kim Alvefur <zash@zash.se>
parents:
6322
diff
changeset
|
37 -- Check how long the username is (Unicode characters) |
|
a1df76ba4f68
mod_block_registrations: Add username length requirements
Kim Alvefur <zash@zash.se>
parents:
6322
diff
changeset
|
38 local length = it.count(username:gmatch("[\000-\127\194-\253][\128-\191]*")); |
|
a1df76ba4f68
mod_block_registrations: Add username length requirements
Kim Alvefur <zash@zash.se>
parents:
6322
diff
changeset
|
39 if length < length_min or length > length_max then return true; end |
|
a1df76ba4f68
mod_block_registrations: Add username length requirements
Kim Alvefur <zash@zash.se>
parents:
6322
diff
changeset
|
40 |
|
6322
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
41 local normalized_username = normal(username); |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
42 if block_users:contains(normalized_username) then return true; end |
|
f110bce35630
mod_block_registrations: Support blocking confusable usernames (UTS 39)
Kim Alvefur <zash@zash.se>
parents:
6321
diff
changeset
|
43 |
|
6321
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
44 for pattern in block_patterns do |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
45 if username:find(pattern) then |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
46 return true; |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
47 end |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
48 end |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
49 -- Not blocked, but check that username matches allowed pattern |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
50 if require_pattern and not username:match(require_pattern) then |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
51 return true; |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
52 end |
|
1053
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 end |
|
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 |
|
1331
dbaa67babeb4
mod_block_registrations: Switch to using the 'user-registering' event
Kim Alvefur <zash@zash.se>
parents:
1053
diff
changeset
|
55 module:hook("user-registering", function(event) |
|
6321
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
56 local username = event.username; |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
57 if is_blocked(username) then |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
58 event.allowed = false; |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
59 return true; |
|
2f01497b04c9
mod_block_registrations: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
5065
diff
changeset
|
60 end |
|
1053
cabbcc1997d9
mod_block_registrations: Allow restricting registrations of certain user accounts, and/or ensure that registered accounts conform to a given pattern
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 end, 10); |
