annotate mod_muc_restrict_pm/mod_muc_restrict_pm.lua @ 5919:99ecfe44910b

mod_pubsub_serverinfo: Explicitly depend on mod_server_info Otherwise the pubsub node will not be advertised unless the admin explicitly loads that module, or another module that depends on it.
author Matthew Wild <mwild1@gmail.com>
date Fri, 07 Jun 2024 15:53:30 +0100
parents d3610fb965d6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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);