Mercurial > prosody-modules
annotate mod_cloud_notify_filters/mod_cloud_notify_filters.lua @ 5195:b4932915e773
mod_http_oauth2: Mention name of client when giving out OOB authorization code
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 03 Mar 2023 21:45:24 +0100 |
parents | 6872e55cfb92 |
children | ba94a5301985 |
rev | line source |
---|---|
4336
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local jid = require "util.jid"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 local xmlns_push = "urn:xmpp:push:0"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local xmlns_push_filter_unknown = "tigase:push:filter:ignore-unknown:0"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local xmlns_push_filter_muted = "tigase:push:filter:muted:0"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local xmlns_push_filter_groupchat = "tigase:push:filter:groupchat:0"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local xmlns_references = "urn:xmpp:reference:0"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 -- https://xeps.tigase.net//docs/push-notifications/encrypt/#41-discovering-support |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 local function account_disco_info(event) |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 event.reply:tag("feature", {var=xmlns_push_filter_unknown}):up(); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 event.reply:tag("feature", {var=xmlns_push_filter_muted}):up(); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 event.reply:tag("feature", {var=xmlns_push_filter_groupchat}):up(); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 module:hook("account-disco-info", account_disco_info); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 function handle_register(event) |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 local enable = event.stanza:get_child("enable", xmlns_push); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 local filter_unknown = enable:get_child("ignore-unknown", xmlns_push_filter_unknown); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 if filter_unknown then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 event.push_info.filter_unknown = true; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 local filter_muted = enable:get_child("muted", xmlns_push_filter_muted); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 if filter_muted then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 local muted_jids = {}; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 for item in filter_muted:childtags("item") do |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 muted_jids[jid.prep(item.attr.jid)] = true; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 event.push_info.muted_jids = muted_jids; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 local filter_groupchat = enable:get_child("groupchat", xmlns_push_filter_groupchat); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 if filter_groupchat then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 local groupchat_rules = {}; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 for item in filter_groupchat:childtags("room") do |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 groupchat_rules[jid.prep(item.attr.jid)] = { |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 when = item.attr.allow; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 nick = item.attr.nick; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 }; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 event.push_info.groupchat_rules = groupchat_rules; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 function handle_push(event) |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 local push_info = event.push_info; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 local stanza = event.original_stanza; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 local user_name, user_host = jid.split(stanza.attr.to); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 local sender_jid = jid.bare(stanza.attr.from); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 if push_info.filter_unknown then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 if user_host == module.host and not is_contact_subscribed(user_name, user_host, sender_jid) then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 event.reason = "Filtering: unknown sender"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 return true; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 if push_info.muted_jids then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 if push_info.muted_jids[sender_jid] then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 event.reason = "Filtering: muted"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 return true; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 if stanza.attr.type == "groupchat" and push_info.groupchat_rules then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 local rule = push_info.groupchat_rules[sender_jid]; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 if rule then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 if rule.when == "never" then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 event.reason = "Filtering: muted group chat"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 return true; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 elseif rule.when == "mentioned" then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 local mentioned = false; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 local our_uri = "xmpp:"..jid.bare(stanza.attr.to); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 local our_muc_uri = rule.nick and "xmpp:"..sender_jid.."/"..rule.nick; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 for reference in stanza:childtags("reference", xmlns_references) do |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 if reference.attr.type == "mention" then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 local mention_uri = reference.attr.uri; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 if mention_uri == our_uri or mention_uri == our_muc_uri then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 mentioned = true; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 break; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 if not mentioned then |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 event.reason = "Filtering: not mentioned"; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 return true; |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 end |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 module:hook("cloud_notify/registration", handle_register); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 module:hook("cloud_notify/push", handle_push); |
6872e55cfb92
mod_cloud_notify_filters: New module to support push notification filters
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 |