Mercurial > prosody-modules
annotate mod_muc_restrict_pm/mod_muc_restrict_pm.lua @ 6319:04c3273cb81f
mod_auth_cyrus: Add empty 'profile' table to SASL handler objects
This is for compatibility with Prosody's built-in util.sasl objects.
A SASL profile table usually includes methods supported by the backend, which
can be used by SASL mechanism handlers to perform operations (such as testing
the password). It also optionally contains a 'cb' field with channel binding
method handlers.
The Cyrus backend doesn't support channel binding, and doesn't have the same
concept of auth backend methods (it handles all that internally, and Prosody
has no insight or control over it).
Thus, we create an empty profile which informs Prosody that the SASL handler
does not support any of the auth or channel binding methods. Some features
will not work, but they didn't work anyway. This just makes it explicit.
This fixes a traceback in mod_sasl2_fast, which expected SASL handlers to
always contain a 'profile' field.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 04 Sep 2025 10:14:46 +0100 |
| 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); |
