annotate mod_broadcast/mod_broadcast.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 9f7c97e55593
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1015
0fc9e1f086c1 mod_broadcast: Allow admins to broadcast
Matthew Wild <mwild1@gmail.com>
parents: 786
diff changeset
1 local is_admin = require "core.usermanager".is_admin;
786
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local allowed_senders = module:get_option_set("broadcast_senders", {});
1016
9f7c97e55593 mod_broadcast: Allow overriding from address on the broadcast stanza
Matthew Wild <mwild1@gmail.com>
parents: 1015
diff changeset
3 local from_address = module:get_option_string("broadcast_from");
786
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 local jid_bare = require "util.jid".bare;
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 function send_to_online(message)
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 local c = 0;
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 for hostname, host_session in pairs(hosts) do
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 if host_session.sessions then
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 for username in pairs(host_session.sessions) do
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 c = c + 1;
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 message.attr.to = username.."@"..hostname;
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 module:send(message);
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 end
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 end
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 end
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 return c;
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 end
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 function send_message(event)
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 local stanza = event.stanza;
1015
0fc9e1f086c1 mod_broadcast: Allow admins to broadcast
Matthew Wild <mwild1@gmail.com>
parents: 786
diff changeset
23 local from = stanza.attr.from;
0fc9e1f086c1 mod_broadcast: Allow admins to broadcast
Matthew Wild <mwild1@gmail.com>
parents: 786
diff changeset
24 if is_admin(from) or allowed_senders:contains(jid_bare(from)) then
1016
9f7c97e55593 mod_broadcast: Allow overriding from address on the broadcast stanza
Matthew Wild <mwild1@gmail.com>
parents: 1015
diff changeset
25 if from_address then
9f7c97e55593 mod_broadcast: Allow overriding from address on the broadcast stanza
Matthew Wild <mwild1@gmail.com>
parents: 1015
diff changeset
26 stanza = st.clone(stanza);
9f7c97e55593 mod_broadcast: Allow overriding from address on the broadcast stanza
Matthew Wild <mwild1@gmail.com>
parents: 1015
diff changeset
27 stanza.attr.from = from_address;
9f7c97e55593 mod_broadcast: Allow overriding from address on the broadcast stanza
Matthew Wild <mwild1@gmail.com>
parents: 1015
diff changeset
28 end
786
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 local c = send_to_online(stanza);
1015
0fc9e1f086c1 mod_broadcast: Allow admins to broadcast
Matthew Wild <mwild1@gmail.com>
parents: 786
diff changeset
30 module:log("debug", "Broadcast stanza from %s to %d online users", from, c);
786
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 return true;
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 else
1015
0fc9e1f086c1 mod_broadcast: Allow admins to broadcast
Matthew Wild <mwild1@gmail.com>
parents: 786
diff changeset
33 module:log("warn", "Broadcasting is not allowed for %s", from);
786
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 end
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 end
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36
e318a341d332 mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 module:hook("message/bare", send_message);