Mercurial > prosody-modules
annotate mod_muc_notifications/mod_muc_notifications.lua @ 5264:d3ebaef1ea7a
mod_http_oauth2: Correctly verify OAuth client credentials on revocation
Makes no sense to validate against username and password here, or using
a token to revoke another token, or itself?
In fact, upon further discussion, why do you need credentials to revoke
a token? If you are not supposed to have the token, revoking it seems
the most responsible thing to do with it, so it should be allowed, while
if you are supposed to have it, you should be allowed to revoke it.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 21 Mar 2023 21:57:18 +0100 |
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") |