annotate mod_muc_restrict_pm/mod_muc_restrict_pm.lua @ 6513:5fb466693e85

mod_storage_xmlarchive: Ensure list index files are removed using os.remove() on the list files leaves the new index files behind since util.datamanager does not know they are removed. Thanks Link Mauve
author Kim Alvefur <zash@zash.se>
date Tue, 07 Apr 2026 21:10:54 +0200
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);