Mercurial > prosody-modules
annotate mod_muc_restrict_avatars/mod_muc_restrict_avatars.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 | 5b95e06d75d5 |
| children |
| rev | line source |
|---|---|
|
5649
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
1 local bare_jid = require"util.jid".bare; |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
2 local mod_muc = module:depends("muc"); |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
3 |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
4 local function filter_avatar_advertisement(tag) |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
5 if tag.attr.xmlns == "vcard-temp:x:update" then |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
6 return nil; |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
7 end |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
8 |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
9 return tag; |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
10 end |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
11 |
|
5881
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
12 -- Function to determine if avatar restriction is enabled |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
13 local function is_avatar_restriction_enabled(room) |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
14 return room._data.restrict_avatars; |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
15 end |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
16 |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
17 -- Add MUC configuration form option for avatar restriction |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
18 module:hook("muc-config-form", function(event) |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
19 local room, form = event.room, event.form; |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
20 table.insert(form, { |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
21 name = "restrict_avatars", |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
22 type = "boolean", |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
23 label = "Restrict avatars to members only", |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
24 value = is_avatar_restriction_enabled(room) |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
25 }); |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
26 end); |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
27 |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
28 -- Handle MUC configuration form submission |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
29 module:hook("muc-config-submitted", function(event) |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
30 local room, fields, changed = event.room, event.fields, event.changed; |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
31 local restrict_avatars = fields["restrict_avatars"]; |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
32 |
|
5896
5b95e06d75d5
Guard for not room
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5881
diff
changeset
|
33 if room and restrict_avatars ~= is_avatar_restriction_enabled(room) then |
|
5881
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
34 -- Update room settings based on the submitted value |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
35 room._data.restrict_avatars = restrict_avatars; |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
36 -- Mark the configuration as changed |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
37 if type(changed) == "table" then |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
38 changed["restrict_avatars"] = true; |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
39 else |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
40 event.changed = true; |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
41 end |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
42 end |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
43 end); |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
44 |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
45 -- Handle presence/full events to filter avatar advertisements |
|
5649
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
46 module:hook("presence/full", function(event) |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
47 local stanza = event.stanza; |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
48 local room = mod_muc.get_room_from_jid(bare_jid(stanza.attr.to)); |
|
5896
5b95e06d75d5
Guard for not room
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5881
diff
changeset
|
49 if room and not room:get_affiliation(stanza.attr.from) then |
|
5881
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
50 if is_avatar_restriction_enabled(room) then |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
51 stanza:maptags(filter_avatar_advertisement); |
|
66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
5649
diff
changeset
|
52 end |
|
5649
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
53 end |
|
2c69577b28c2
mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
54 end, 1); |
