author | Nicholas George <wirlaburla@worlio.com> |
Fri, 24 May 2024 18:30:47 -0500 | |
changeset 5918 | d3610fb965d6 |
parent 5917 | d82c0383106a |
permissions | -rw-r--r-- |
5914
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"; |
5918
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
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:
5917
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:
5917
diff
changeset
|
4 |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
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:
5917
diff
changeset
|
6 |
local compat_map = { |
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
diff
changeset
|
7 |
everyone = "visitor"; |
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
diff
changeset
|
8 |
participants = "participant"; |
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
diff
changeset
|
9 |
moderators = "moderator"; |
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
diff
changeset
|
10 |
members = "affiliated"; |
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
diff
changeset
|
11 |
}; |
5914
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
12 |
|
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
diff
changeset
|
13 |
local function get_allow_pm(room) |
5918
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
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:
5917
diff
changeset
|
15 |
return compat_map[val] or val or 'visitor'; |
5914
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 |
|
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
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:
5916
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:
5916
diff
changeset
|
20 |
room._data.allow_pm = val; |
5914
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 |
|
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
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:
5916
diff
changeset
|
25 |
return room._data.allow_modpm or false; |
5914
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 |
|
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
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:
5916
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:
5916
diff
changeset
|
30 |
room._data.allow_modpm = val; |
5914
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) |
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
diff
changeset
|
35 |
local pmval = get_allow_pm(event.room); |
5914
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, { |
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
diff
changeset
|
37 |
name = 'muc#allow_pm'; |
5914
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 = { |
5918
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
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:
5917
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:
5917
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:
5917
diff
changeset
|
44 |
{ value = 'moderator', label = 'Moderators', default = pmval == 'moderator' }, |
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
diff
changeset
|
45 |
{ value = 'none', label = 'No one', default = pmval == 'none' } |
5914
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, { |
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
diff
changeset
|
49 |
name = 'muc#allow_modpm'; |
5914
7358d1b64b1d
mod_muc_restrict_pm: Limit who may send and recieve MUC PMs
Nicholas George <wirlaburla@worlio.com>
parents:
diff
changeset
|
50 |
type = 'boolean'; |
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
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:
5916
diff
changeset
|
52 |
value = get_allow_modpm(event.room) |
5914
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 |
|
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
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:
5916
diff
changeset
|
57 |
if set_allow_pm(event.room, event.value) then |
5914
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 |
|
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
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:
5916
diff
changeset
|
63 |
if set_allow_modpm(event.room, event.value) then |
5914
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) |
5916
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5914
diff
changeset
|
69 |
local stanza, room = event.stanza, event.room; |
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5914
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:
5914
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:
5914
diff
changeset
|
72 |
|
5914
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 |
5916
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5914
diff
changeset
|
75 |
|
5918
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
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:
5917
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:
5917
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:
5917
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:
5917
diff
changeset
|
80 |
end |
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
diff
changeset
|
81 |
end |
5916
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5914
diff
changeset
|
82 |
|
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
diff
changeset
|
83 |
local pmval = get_allow_pm(room); |
5918
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
diff
changeset
|
84 |
|
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
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:
5917
diff
changeset
|
86 |
if pmval ~= "none" then |
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
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:
5917
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:
5917
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:
5917
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:
5917
diff
changeset
|
91 |
end |
d3610fb965d6
mod_muc_restrict_pm: Backport changes from upstream timber patch.
Nicholas George <wirlaburla@worlio.com>
parents:
5917
diff
changeset
|
92 |
end |
5916
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5914
diff
changeset
|
93 |
|
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5914
diff
changeset
|
94 |
room:route_to_occupant( |
9d0270680d1f
mod_muc_restrict_pm: fix lua warnings
Nicholas George <wirlaburla@worlio.com>
parents:
5914
diff
changeset
|
95 |
from_occupant, |
5917
d82c0383106a
mod_muc_restrict_pm: small rewrite. improves room config options
Nicholas George <wirlaburla@worlio.com>
parents:
5916
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:
5916
diff
changeset
|
97 |
); |
5914
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); |