annotate mod_cloud_notify_filters/mod_cloud_notify_filters.lua @ 4690:82dabfffaddf

mod_muc_require_tos: Add this new module
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Thu, 16 Sep 2021 20:41:14 +0200
parents 6872e55cfb92
children ba94a5301985
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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