Mercurial > prosody-modules
annotate mod_muc_restrict_pm/mod_muc_restrict_pm.lua @ 6029:cc665f343690
mod_firewall: SUBSCRIBED: Flip subscription check to match documentation
The documentation claims that this condition checks whether the recipient is
subscribed to the sender.
However, it was using the wrong method, and actually checking whether the
sender was subscribed to the recipient.
A quick poll of folk suggested that the documentation's approach is the right
one, so this should fix the code to match the documentation.
This should also fix the bundled anti-spam rules from blocking presence from
JIDs that you subscribe do (but don't have a mutual subscription with).
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 22 Nov 2024 13:50:48 +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); |
