Mercurial > prosody-modules
annotate mod_muc_restrict_pm/mod_muc_restrict_pm.lua @ 6092:bd3ff802d883
mod_anti_spam: Fix another traceback for origin sessions without an IP
This is likely to be the case for stanzas originating from local hosts, for
example (so not true s2s). It should be safe to bypass the IP check for those.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sat, 28 Dec 2024 21:02:08 +0000 |
| parents | d3610fb965d6 |
| children |
| rev | line source |
|---|---|
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
1 local st = require "util.stanza"; |
|
5914
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
2 local muc_util = module:require "muc/util"; |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
3 local valid_roles = muc_util.valid_roles; |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
4 |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
5 -- Backported backwards compatibility map (Thanks MattJ) |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
6 local compat_map = { |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
7 everyone = "visitor"; |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
8 participants = "participant"; |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
9 moderators = "moderator"; |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
10 members = "affiliated"; |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
11 }; |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
12 |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
13 local function get_allow_pm(room) |
|
5914
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
14 local val = room._data.allow_pm; |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
15 return compat_map[val] or val or 'visitor'; |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
16 end |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
17 |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
18 local function set_allow_pm(room, val) |
|
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
19 if get_allow_pm(room) == val then return false; end |
|
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
20 room._data.allow_pm = val; |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
21 return true; |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
22 end |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
23 |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
24 local function get_allow_modpm(room) |
|
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
25 return room._data.allow_modpm or false; |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
26 end |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
27 |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
28 local function set_allow_modpm(room, val) |
|
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
29 if get_allow_modpm(room) == val then return false; end |
|
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
30 room._data.allow_modpm = val; |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
31 return true; |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
32 end |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
33 |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
34 module:hook("muc-config-form", function(event) |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
35 local pmval = get_allow_pm(event.room); |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
36 table.insert(event.form, { |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
37 name = 'muc#allow_pm'; |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
38 type = 'list-single'; |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
39 label = 'Allow PMs from'; |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
40 options = { |
|
5914
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
41 { value = 'visitor', label = 'Everyone', default = pmval == 'visitor' }, |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
42 { value = 'participant', label = 'Participants', default = pmval == 'participant' }, |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
43 { value = 'affiliated', label = 'Members', default = pmval == 'affiliated' }, |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
44 { value = 'moderator', label = 'Moderators', default = pmval == 'moderator' }, |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
45 { value = 'none', label = 'No one', default = pmval == 'none' } |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
46 } |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
47 }); |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
48 table.insert(event.form, { |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
49 name = 'muc#allow_modpm'; |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
50 type = 'boolean'; |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
51 label = 'Allow PMs to moderators'; |
|
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
52 value = get_allow_modpm(event.room) |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
53 }); |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
54 end); |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
55 |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
56 module:hook("muc-config-submitted/muc#allow_pm", function(event) |
|
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
57 if set_allow_pm(event.room, event.value) then |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
58 event.status_codes["104"] = true; |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
59 end |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
60 end); |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
61 |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
62 module:hook("muc-config-submitted/muc#allow_modpm", function(event) |
|
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
63 if set_allow_modpm(event.room, event.value) then |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
64 event.status_codes["104"] = true; |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
65 end |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
66 end); |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
67 |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
68 module:hook("muc-private-message", function(event) |
|
5912
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5910
diff
changeset
|
69 local stanza, room = event.stanza, event.room; |
|
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5910
diff
changeset
|
70 local from_occupant = room:get_occupant_by_nick(stanza.attr.from); |
|
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5910
diff
changeset
|
71 local to_occupant = room:get_occupant_by_nick(stanza.attr.to); |
|
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5910
diff
changeset
|
72 |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
73 -- To self is always okay |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
74 if to_occupant.bare_jid == from_occupant.bare_jid then return; end |
|
5912
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5910
diff
changeset
|
75 |
|
5914
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
76 if get_allow_modpm(room) then |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
77 if to_occupant and to_occupant.role == 'moderator' |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
78 or from_occupant and from_occupant.role == "moderator" then |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
79 return; -- Allow to/from moderators |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
80 end |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
81 end |
|
5912
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5910
diff
changeset
|
82 |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
83 local pmval = get_allow_pm(room); |
|
5914
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
84 |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
85 -- Backported improved handling (Thanks MattJ) |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
86 if pmval ~= "none" then |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
87 if pmval == "affiliated" and room:get_affiliation(from_occupant.bare_jid) then |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
88 return; -- Allow from affiliated users |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
89 elseif valid_roles[from_occupant.role] >= valid_roles[pmval] then |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
90 return; -- Allow from a permitted role |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
91 end |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5913
diff
changeset
|
92 end |
|
5912
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5910
diff
changeset
|
93 |
|
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5910
diff
changeset
|
94 room:route_to_occupant( |
|
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5910
diff
changeset
|
95 from_occupant, |
|
5913
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
96 st.error_reply(stanza, "cancel", "policy-violation", "Private messages are restricted", room.jid) |
|
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5912
diff
changeset
|
97 ); |
|
5910
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
98 return false; |
|
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
99 end, 1); |
