annotate mod_broadcast/mod_broadcast.lua @ 6171:fe8222112cf4

mod_conversejs: Serve base app at / This makes things slightly less awkward for the browser to figure out which URLs belong to a PWA. The app's "start URL" was previously without the '/' and therefore was not considered within the scope of the PWA. Now the canonical app URL will always have a '/'. Prosody/mod_http should take care of redirecting existing links without the trailing / to the new URL. If you have an installation at https://prosody/conversejs then it is now at https://prosody/conversejs/ (the first URL will now redirect to the second URL if you use it). The alternative would be to make the PWA scope include the parent, i.e. the whole of https://prosody/ in this case. This might get messy if other PWAs are provided by the same site or Prosody installation, however.
author Matthew Wild <mwild1@gmail.com>
date Tue, 11 Feb 2025 13:18:38 +0000
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);