Mercurial > prosody-modules
annotate mod_muc_notifications/mod_muc_notifications.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 | ef752c5115f7 |
children |
rev | line source |
---|---|
3498
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
1 -- mod_muc_notifications |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
2 -- |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2019 Marcos de Vera Piquero <marcos.devera@quobis.com> |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
4 -- |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
5 -- This file is MIT/X11 licensed. |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
6 -- |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
7 -- A module to notify non-present members of messages in a group chat |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
8 -- |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
9 |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
10 local id = require"util.id" |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
11 local st = require"util.stanza" |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
12 |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
13 local use_invite = module:get_option_boolean("muc_notification_invite", false) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
14 |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
15 -- Given a stanza, compute if it qualifies as important (notifiable) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
16 -- return true for message stanzas with non-empty body |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
17 -- Should probably use something similar to muc-message-is-historic event |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
18 local function is_important(stanza) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
19 local body = stanza:find("body#") |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
20 return body and #body |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
21 end |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
22 |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
23 local function handle_muc_message(event) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
24 -- event.room and event.stanza are available |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
25 local room = event.room |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
26 local stanza = event.stanza |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
27 for jid, aff in pairs(room._affiliations) do |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
28 if aff ~= "outcast" then |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
29 local is_occupant = false |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
30 for _, occupant in pairs(room._occupants) do |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
31 if occupant.bare_jid == jid then |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
32 is_occupant = true |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
33 break |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
34 end |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
35 end |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
36 if not is_occupant and is_important(stanza) then |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
37 -- send notification to jid |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
38 local attrs = { |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
39 to = jid, |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
40 id = id.short(), |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
41 from = room.jid, |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
42 } |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
43 local not_attrs = { |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
44 xmlns = "http://quobis.com/xmpp/muc#push", |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
45 jid = room.jid, |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
46 } |
4089
ef752c5115f7
mod_muc_notifications: adapt to MUC get_name() API changes
marc0s <marcos@tenak.net>
parents:
3498
diff
changeset
|
47 local reason = "You have messages in group chat "..(room:get_name() or room.jid) |
3498
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
48 local notification = st.message(attrs) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
49 :body(reason):up() |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
50 :tag("notification", not_attrs):up() |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
51 :tag("no-store", {xmlns = "urn:xmpp:hints"}) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
52 local invite = st.message(attrs):tag("x", {xmlns = "http://jabber.org/protocol/muc#user"}) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
53 :tag("invite", {from = stanza.attr.from}) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
54 :tag("reason"):text(reason):up():up():up() |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
55 :tag("notification", not_attrs):up() |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
56 :tag("no-store", {xmlns = "urn:xmpp:hints"}) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
57 module:log("debug", "notifying with %s", tostring(use_invite and invite or notification)) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
58 module:send(use_invite and invite or notification) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
59 module:log("debug", "sent notification of MUC message %s", use_invite and invite or notification) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
60 end |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
61 end |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
62 end |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
63 end |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
64 |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
65 module:hook("muc-broadcast-message", handle_muc_message) |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
66 |
69219097aa85
muc_notifications: notify non-present members of new messages
marc0s <marcos.devera@quobis.com>
parents:
diff
changeset
|
67 module:log("debug", "Module loaded") |