Mercurial > prosody-modules
annotate mod_broadcast/mod_broadcast.lua @ 5461:06640647d193
mod_http_oauth2: Fix use of arbitrary ports in loopback redirect URIs
Per draft-ietf-oauth-v2-1-08#section-8.4.2
> The authorization server MUST allow any port to be specified at the
> time of the request for loopback IP redirect URIs, to accommodate
> clients that obtain an available ephemeral port from the operating
> system at the time of the request.
Uncertain if it should normalize the host part, but it also seems
harmless to treat IPv6 and IPv4 the same here.
One thing is that "localhost" is NOT RECOMMENDED because it can
sometimes be pointed to non-loopback interfaces via DNS or hosts file.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 17 May 2023 13:51:30 +0200 |
| parents | 9f7c97e55593 |
| children |
| 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); |
