Software /
code /
prosody
Annotate
plugins/mod_blocklist.lua @ 11416:0a9d6eec6a8f
doap: Add RFC 7673
Supported in the DNS layer, this isn't RFC about how to use it in XMPP.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 02 Mar 2021 22:57:20 +0100 |
parent | 10111:0f335815244f |
child | 12775:1dd468c63a3d |
rev | line source |
---|---|
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- Prosody IM |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 -- Copyright (C) 2009-2010 Matthew Wild |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 -- Copyright (C) 2009-2010 Waqas Hussain |
6976
4688ff9d4f2b
mod_blocklist: Update Copyright header
Kim Alvefur <zash@zash.se>
parents:
6975
diff
changeset
|
4 -- Copyright (C) 2014-2015 Kim Alvefur |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 -- |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 -- This project is MIT/X11 licensed. Please see the |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 -- COPYING file in the source package for more information. |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 -- |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 -- This module implements XEP-0191: Blocking Command |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 -- |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local user_exists = require"core.usermanager".user_exists; |
6974
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
13 local rostermanager = require"core.rostermanager"; |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
14 local is_contact_subscribed = rostermanager.is_contact_subscribed; |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
15 local is_contact_pending_in = rostermanager.is_contact_pending_in; |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
16 local load_roster = rostermanager.load_roster; |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
17 local save_roster = rostermanager.save_roster; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 local st = require"util.stanza"; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 local st_error_reply = st.error_reply; |
6629
42aeb882b3e1
mod_blocklist: Some cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6531
diff
changeset
|
20 local jid_prep = require"util.jid".prep; |
42aeb882b3e1
mod_blocklist: Some cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6531
diff
changeset
|
21 local jid_split = require"util.jid".split; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 local storage = module:open_store(); |
6629
42aeb882b3e1
mod_blocklist: Some cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6531
diff
changeset
|
24 local sessions = prosody.hosts[module.host].sessions; |
8275
13dad833e821
mod_blocklist: Drop messages to existing full JIDs in order to prevent issues with MUC PMs, fixes #690
Kim Alvefur <zash@zash.se>
parents:
8040
diff
changeset
|
25 local full_sessions = prosody.full_sessions; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
6970
cde7d14052f9
mod_blocklist: Expand comments on caching of blocklists
Kim Alvefur <zash@zash.se>
parents:
6969
diff
changeset
|
27 -- First level cache of blocklists by username. |
cde7d14052f9
mod_blocklist: Expand comments on caching of blocklists
Kim Alvefur <zash@zash.se>
parents:
6969
diff
changeset
|
28 -- Weak table so may randomly expire at any time. |
6944
62b6f6d230f1
mod_blocklist: Use util.cache to manage how many users blocklists are kept in memory
Kim Alvefur <zash@zash.se>
parents:
6833
diff
changeset
|
29 local cache = setmetatable({}, { __mode = "v" }); |
62b6f6d230f1
mod_blocklist: Use util.cache to manage how many users blocklists are kept in memory
Kim Alvefur <zash@zash.se>
parents:
6833
diff
changeset
|
30 |
6970
cde7d14052f9
mod_blocklist: Expand comments on caching of blocklists
Kim Alvefur <zash@zash.se>
parents:
6969
diff
changeset
|
31 -- Second level of caching, keeps a fixed number of items, also anchors |
cde7d14052f9
mod_blocklist: Expand comments on caching of blocklists
Kim Alvefur <zash@zash.se>
parents:
6969
diff
changeset
|
32 -- items in the above cache. |
cde7d14052f9
mod_blocklist: Expand comments on caching of blocklists
Kim Alvefur <zash@zash.se>
parents:
6969
diff
changeset
|
33 -- |
cde7d14052f9
mod_blocklist: Expand comments on caching of blocklists
Kim Alvefur <zash@zash.se>
parents:
6969
diff
changeset
|
34 -- The size of this affects how often we will need to load a blocklist from |
cde7d14052f9
mod_blocklist: Expand comments on caching of blocklists
Kim Alvefur <zash@zash.se>
parents:
6969
diff
changeset
|
35 -- disk, which we want to avoid during routing. On the other hand, we don't |
cde7d14052f9
mod_blocklist: Expand comments on caching of blocklists
Kim Alvefur <zash@zash.se>
parents:
6969
diff
changeset
|
36 -- want to use too much memory either, so this can be tuned by advanced |
cde7d14052f9
mod_blocklist: Expand comments on caching of blocklists
Kim Alvefur <zash@zash.se>
parents:
6969
diff
changeset
|
37 -- users. TODO use science to figure out a better default, 64 is just a guess. |
6944
62b6f6d230f1
mod_blocklist: Use util.cache to manage how many users blocklists are kept in memory
Kim Alvefur <zash@zash.se>
parents:
6833
diff
changeset
|
38 local cache_size = module:get_option_number("blocklist_cache_size", 64); |
62b6f6d230f1
mod_blocklist: Use util.cache to manage how many users blocklists are kept in memory
Kim Alvefur <zash@zash.se>
parents:
6833
diff
changeset
|
39 local cache2 = require"util.cache".new(cache_size); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 local null_blocklist = {}; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 module:add_feature("urn:xmpp:blocking"); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 local function set_blocklist(username, blocklist) |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 local ok, err = storage:set(username, blocklist); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 if not ok then |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 return ok, err; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 -- Successful save, update the cache |
6944
62b6f6d230f1
mod_blocklist: Use util.cache to manage how many users blocklists are kept in memory
Kim Alvefur <zash@zash.se>
parents:
6833
diff
changeset
|
51 cache2:set(username, blocklist); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 cache[username] = blocklist; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 return true; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 -- Migrates from the old mod_privacy storage |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 local function migrate_privacy_list(username) |
7772
752697d68fda
mod_blocklist: Return early from migration if no valid privacy list data is found
Kim Alvefur <zash@zash.se>
parents:
7771
diff
changeset
|
58 local legacy_data = module:open_store("privacy"):get(username); |
752697d68fda
mod_blocklist: Return early from migration if no valid privacy list data is found
Kim Alvefur <zash@zash.se>
parents:
7771
diff
changeset
|
59 if not legacy_data or not legacy_data.lists or not legacy_data.default then return; end |
752697d68fda
mod_blocklist: Return early from migration if no valid privacy list data is found
Kim Alvefur <zash@zash.se>
parents:
7771
diff
changeset
|
60 local default_list = legacy_data.lists[legacy_data.default]; |
752697d68fda
mod_blocklist: Return early from migration if no valid privacy list data is found
Kim Alvefur <zash@zash.se>
parents:
7771
diff
changeset
|
61 if not default_list or not default_list.items then return; end |
752697d68fda
mod_blocklist: Return early from migration if no valid privacy list data is found
Kim Alvefur <zash@zash.se>
parents:
7771
diff
changeset
|
62 |
7771
2b288dab781a
mod_blocklist: Make the 'false' metadata field a table so we can store timestamps and other useful data
Kim Alvefur <zash@zash.se>
parents:
7621
diff
changeset
|
63 local migrated_data = { [false] = { created = os.time(); migrated = "privacy" }}; |
7772
752697d68fda
mod_blocklist: Return early from migration if no valid privacy list data is found
Kim Alvefur <zash@zash.se>
parents:
7771
diff
changeset
|
64 |
7773
7fd26815fcf6
mod_blocklist: Remove one indentation level
Kim Alvefur <zash@zash.se>
parents:
7772
diff
changeset
|
65 module:log("info", "Migrating blocklist from mod_privacy storage for user '%s'", username); |
7774
1f55edac1f72
mod_blocklist: Simplify loop with ipairs
Kim Alvefur <zash@zash.se>
parents:
7773
diff
changeset
|
66 for _, item in ipairs(default_list.items) do |
7773
7fd26815fcf6
mod_blocklist: Remove one indentation level
Kim Alvefur <zash@zash.se>
parents:
7772
diff
changeset
|
67 if item.type == "jid" and item.action == "deny" then |
7774
1f55edac1f72
mod_blocklist: Simplify loop with ipairs
Kim Alvefur <zash@zash.se>
parents:
7773
diff
changeset
|
68 local jid = jid_prep(item.value); |
7773
7fd26815fcf6
mod_blocklist: Remove one indentation level
Kim Alvefur <zash@zash.se>
parents:
7772
diff
changeset
|
69 if not jid then |
10111
0f335815244f
plugins: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
10054
diff
changeset
|
70 module:log("warn", "Invalid JID in privacy store for user '%s' not migrated: %s", username, item.value); |
7773
7fd26815fcf6
mod_blocklist: Remove one indentation level
Kim Alvefur <zash@zash.se>
parents:
7772
diff
changeset
|
71 else |
7fd26815fcf6
mod_blocklist: Remove one indentation level
Kim Alvefur <zash@zash.se>
parents:
7772
diff
changeset
|
72 migrated_data[jid] = true; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 set_blocklist(username, migrated_data); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 return migrated_data; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 local function get_blocklist(username) |
7775
3733bdbe0b22
mod_blocklist: Check first level cache before calling blocklist getter
Kim Alvefur <zash@zash.se>
parents:
7774
diff
changeset
|
81 local blocklist = cache2:get(username); |
6944
62b6f6d230f1
mod_blocklist: Use util.cache to manage how many users blocklists are kept in memory
Kim Alvefur <zash@zash.se>
parents:
6833
diff
changeset
|
82 if not blocklist then |
6629
42aeb882b3e1
mod_blocklist: Some cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6531
diff
changeset
|
83 if not user_exists(username, module.host) then |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 return null_blocklist; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 blocklist = storage:get(username); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 if not blocklist then |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 blocklist = migrate_privacy_list(username); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 end |
7772
752697d68fda
mod_blocklist: Return early from migration if no valid privacy list data is found
Kim Alvefur <zash@zash.se>
parents:
7771
diff
changeset
|
90 if not blocklist then |
752697d68fda
mod_blocklist: Return early from migration if no valid privacy list data is found
Kim Alvefur <zash@zash.se>
parents:
7771
diff
changeset
|
91 blocklist = { [false] = { created = os.time(); }; }; |
752697d68fda
mod_blocklist: Return early from migration if no valid privacy list data is found
Kim Alvefur <zash@zash.se>
parents:
7771
diff
changeset
|
92 end |
6944
62b6f6d230f1
mod_blocklist: Use util.cache to manage how many users blocklists are kept in memory
Kim Alvefur <zash@zash.se>
parents:
6833
diff
changeset
|
93 cache2:set(username, blocklist); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 end |
6944
62b6f6d230f1
mod_blocklist: Use util.cache to manage how many users blocklists are kept in memory
Kim Alvefur <zash@zash.se>
parents:
6833
diff
changeset
|
95 cache[username] = blocklist; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 return blocklist; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 module:hook("iq-get/self/urn:xmpp:blocking:blocklist", function (event) |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 local origin, stanza = event.origin, event.stanza; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 local username = origin.username; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 local reply = st.reply(stanza):tag("blocklist", { xmlns = "urn:xmpp:blocking" }); |
7775
3733bdbe0b22
mod_blocklist: Check first level cache before calling blocklist getter
Kim Alvefur <zash@zash.se>
parents:
7774
diff
changeset
|
103 local blocklist = cache[username] or get_blocklist(username); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 for jid in pairs(blocklist) do |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 if jid then |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 reply:tag("item", { jid = jid }):up(); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 origin.interested_blocklist = true; -- Gets notified about changes |
6833
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
110 origin.send(reply); |
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
111 return true; |
7620
c27c9695d130
mod_blocklist: Decrease priority of iq hooks to ease handling by other modules
Kim Alvefur <zash@zash.se>
parents:
7079
diff
changeset
|
112 end, -1); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
113 |
6351 | 114 -- Add or remove some jid(s) from the blocklist |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
115 -- We want this to be atomic and not do a partial update |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
116 local function edit_blocklist(event) |
9248
1d6a2cc389eb
mod_blocklist: Store timestamp of blocking to allow age to be determined
Kim Alvefur <zash@zash.se>
parents:
8741
diff
changeset
|
117 local now = os.time(); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 local origin, stanza = event.origin, event.stanza; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
119 local username = origin.username; |
6971
96080d86bab8
mod_blocklist: Add comments describing some variables
Kim Alvefur <zash@zash.se>
parents:
6970
diff
changeset
|
120 local action = stanza.tags[1]; -- "block" or "unblock" |
9248
1d6a2cc389eb
mod_blocklist: Store timestamp of blocking to allow age to be determined
Kim Alvefur <zash@zash.se>
parents:
8741
diff
changeset
|
121 local is_blocking = action.name == "block" and now or nil; -- nil if unblocking |
6971
96080d86bab8
mod_blocklist: Add comments describing some variables
Kim Alvefur <zash@zash.se>
parents:
6970
diff
changeset
|
122 local new = {}; -- JIDs to block depending or unblock on action |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
123 |
9248
1d6a2cc389eb
mod_blocklist: Store timestamp of blocking to allow age to be determined
Kim Alvefur <zash@zash.se>
parents:
8741
diff
changeset
|
124 |
6973
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
125 -- XEP-0191 sayeth: |
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
126 -- > When the user blocks communications with the contact, the user's |
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
127 -- > server MUST send unavailable presence information to the contact (but |
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
128 -- > only if the contact is allowed to receive presence notifications [...] |
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
129 -- So contacts we need to do that for are added to the set below. |
6975
5bc229eb99d3
mod_blocklist: Skip creating some tables and some processing if unblocking
Kim Alvefur <zash@zash.se>
parents:
6974
diff
changeset
|
130 local send_unavailable = is_blocking and {}; |
10052
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
131 local send_available = not is_blocking and {}; |
6973
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
132 |
6974
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
133 -- Because blocking someone currently also blocks the ability to reject |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
134 -- subscription requests, we'll preemptively reject such |
6975
5bc229eb99d3
mod_blocklist: Skip creating some tables and some processing if unblocking
Kim Alvefur <zash@zash.se>
parents:
6974
diff
changeset
|
135 local remove_pending = is_blocking and {}; |
6974
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
136 |
6352
b703e6930e4c
mod_blocklist: Use full word as variable name, we can afford that
Kim Alvefur <zash@zash.se>
parents:
6351
diff
changeset
|
137 for item in action:childtags("item") do |
6629
42aeb882b3e1
mod_blocklist: Some cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6531
diff
changeset
|
138 local jid = jid_prep(item.attr.jid); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
139 if not jid then |
6833
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
140 origin.send(st_error_reply(stanza, "modify", "jid-malformed")); |
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
141 return true; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
142 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
143 item.attr.jid = jid; -- echo back prepped |
6973
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
144 new[jid] = true; |
6975
5bc229eb99d3
mod_blocklist: Skip creating some tables and some processing if unblocking
Kim Alvefur <zash@zash.se>
parents:
6974
diff
changeset
|
145 if is_blocking then |
5bc229eb99d3
mod_blocklist: Skip creating some tables and some processing if unblocking
Kim Alvefur <zash@zash.se>
parents:
6974
diff
changeset
|
146 if is_contact_subscribed(username, module.host, jid) then |
5bc229eb99d3
mod_blocklist: Skip creating some tables and some processing if unblocking
Kim Alvefur <zash@zash.se>
parents:
6974
diff
changeset
|
147 send_unavailable[jid] = true; |
5bc229eb99d3
mod_blocklist: Skip creating some tables and some processing if unblocking
Kim Alvefur <zash@zash.se>
parents:
6974
diff
changeset
|
148 elseif is_contact_pending_in(username, module.host, jid) then |
5bc229eb99d3
mod_blocklist: Skip creating some tables and some processing if unblocking
Kim Alvefur <zash@zash.se>
parents:
6974
diff
changeset
|
149 remove_pending[jid] = true; |
5bc229eb99d3
mod_blocklist: Skip creating some tables and some processing if unblocking
Kim Alvefur <zash@zash.se>
parents:
6974
diff
changeset
|
150 end |
10052
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
151 elseif is_contact_subscribed(username, module.host, jid) then |
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
152 send_available[jid] = true; |
6973
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
153 end |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
154 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
155 |
6968
828a10e0464b
mod_blocklist: Rename variable for clarity
Kim Alvefur <zash@zash.se>
parents:
6967
diff
changeset
|
156 if is_blocking and not next(new) then |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
157 -- <block/> element does not contain at least one <item/> child element |
6833
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
158 origin.send(st_error_reply(stanza, "modify", "bad-request")); |
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
159 return true; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
160 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
161 |
7775
3733bdbe0b22
mod_blocklist: Check first level cache before calling blocklist getter
Kim Alvefur <zash@zash.se>
parents:
7774
diff
changeset
|
162 local blocklist = cache[username] or get_blocklist(username); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
163 |
7771
2b288dab781a
mod_blocklist: Make the 'false' metadata field a table so we can store timestamps and other useful data
Kim Alvefur <zash@zash.se>
parents:
7621
diff
changeset
|
164 local new_blocklist = { |
9993
02a41315d275
Fix various spelling mistakes [codespell]
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
165 -- We set the [false] key to something as a signal not to migrate privacy lists |
9248
1d6a2cc389eb
mod_blocklist: Store timestamp of blocking to allow age to be determined
Kim Alvefur <zash@zash.se>
parents:
8741
diff
changeset
|
166 [false] = blocklist[false] or { created = now; }; |
7771
2b288dab781a
mod_blocklist: Make the 'false' metadata field a table so we can store timestamps and other useful data
Kim Alvefur <zash@zash.se>
parents:
7621
diff
changeset
|
167 }; |
2b288dab781a
mod_blocklist: Make the 'false' metadata field a table so we can store timestamps and other useful data
Kim Alvefur <zash@zash.se>
parents:
7621
diff
changeset
|
168 if type(blocklist[false]) == "table" then |
9248
1d6a2cc389eb
mod_blocklist: Store timestamp of blocking to allow age to be determined
Kim Alvefur <zash@zash.se>
parents:
8741
diff
changeset
|
169 new_blocklist[false].modified = now; |
7771
2b288dab781a
mod_blocklist: Make the 'false' metadata field a table so we can store timestamps and other useful data
Kim Alvefur <zash@zash.se>
parents:
7621
diff
changeset
|
170 end |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
171 |
6968
828a10e0464b
mod_blocklist: Rename variable for clarity
Kim Alvefur <zash@zash.se>
parents:
6967
diff
changeset
|
172 if is_blocking or next(new) then |
9248
1d6a2cc389eb
mod_blocklist: Store timestamp of blocking to allow age to be determined
Kim Alvefur <zash@zash.se>
parents:
8741
diff
changeset
|
173 for jid, t in pairs(blocklist) do |
1d6a2cc389eb
mod_blocklist: Store timestamp of blocking to allow age to be determined
Kim Alvefur <zash@zash.se>
parents:
8741
diff
changeset
|
174 if jid then new_blocklist[jid] = t; end |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
175 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
176 for jid in pairs(new) do |
6968
828a10e0464b
mod_blocklist: Rename variable for clarity
Kim Alvefur <zash@zash.se>
parents:
6967
diff
changeset
|
177 new_blocklist[jid] = is_blocking; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
178 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
179 -- else empty the blocklist |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
180 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
181 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
182 local ok, err = set_blocklist(username, new_blocklist); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
183 if ok then |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
184 origin.send(st.reply(stanza)); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
185 else |
6833
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
186 origin.send(st_error_reply(stanza, "wait", "internal-server-error", err)); |
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
187 return true; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
188 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
189 |
6968
828a10e0464b
mod_blocklist: Rename variable for clarity
Kim Alvefur <zash@zash.se>
parents:
6967
diff
changeset
|
190 if is_blocking then |
6973
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
191 for jid in pairs(send_unavailable) do |
10054
0656bd283fa2
mod_blocklist: Add comment to clarify some logic
Kim Alvefur <zash@zash.se>
parents:
10053
diff
changeset
|
192 -- Check that this JID isn't already blocked, i.e. this is not a change |
6973
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
193 if not blocklist[jid] then |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
194 for _, session in pairs(sessions[username].sessions) do |
6495
44df423f8290
mod_blocklist: Don't send unavailable presence from unavailable sessions when blocking a contact
Kim Alvefur <zash@zash.se>
parents:
6494
diff
changeset
|
195 if session.presence then |
44df423f8290
mod_blocklist: Don't send unavailable presence from unavailable sessions when blocking a contact
Kim Alvefur <zash@zash.se>
parents:
6494
diff
changeset
|
196 module:send(st.presence({ type = "unavailable", to = jid, from = session.full_jid })); |
44df423f8290
mod_blocklist: Don't send unavailable presence from unavailable sessions when blocking a contact
Kim Alvefur <zash@zash.se>
parents:
6494
diff
changeset
|
197 end |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
198 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
199 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
200 end |
6974
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
201 |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
202 if next(remove_pending) then |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
203 local roster = load_roster(username, module.host); |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
204 for jid in pairs(remove_pending) do |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
205 roster[false].pending[jid] = nil; |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
206 end |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
207 save_roster(username, module.host, roster); |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
208 -- Not much we can do about save failing here |
bdb216e0688a
mod_blocklist: When blocking someone who sent a subscription request, forget that request since the user would be unable to deny it while blocked (Fixes #574)
Kim Alvefur <zash@zash.se>
parents:
6973
diff
changeset
|
209 end |
10052
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
210 else |
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
211 local user_bare = username .. "@" .. module.host; |
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
212 for jid in pairs(send_available) do |
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
213 module:send(st.presence({ type = "probe", to = user_bare, from = jid })); |
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
214 end |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
215 end |
6972
9e926e48cbf9
mod_blocklist: session[username] can't possibly be unset if that user is sending queries
Kim Alvefur <zash@zash.se>
parents:
6971
diff
changeset
|
216 |
9e926e48cbf9
mod_blocklist: session[username] can't possibly be unset if that user is sending queries
Kim Alvefur <zash@zash.se>
parents:
6971
diff
changeset
|
217 local blocklist_push = st.iq({ type = "set", id = "blocklist-push" }) |
9e926e48cbf9
mod_blocklist: session[username] can't possibly be unset if that user is sending queries
Kim Alvefur <zash@zash.se>
parents:
6971
diff
changeset
|
218 :add_child(action); -- I am lazy |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
219 |
6972
9e926e48cbf9
mod_blocklist: session[username] can't possibly be unset if that user is sending queries
Kim Alvefur <zash@zash.se>
parents:
6971
diff
changeset
|
220 for _, session in pairs(sessions[username].sessions) do |
9e926e48cbf9
mod_blocklist: session[username] can't possibly be unset if that user is sending queries
Kim Alvefur <zash@zash.se>
parents:
6971
diff
changeset
|
221 if session.interested_blocklist then |
9e926e48cbf9
mod_blocklist: session[username] can't possibly be unset if that user is sending queries
Kim Alvefur <zash@zash.se>
parents:
6971
diff
changeset
|
222 blocklist_push.attr.to = session.full_jid; |
9e926e48cbf9
mod_blocklist: session[username] can't possibly be unset if that user is sending queries
Kim Alvefur <zash@zash.se>
parents:
6971
diff
changeset
|
223 session.send(blocklist_push); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
224 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
225 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
226 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
227 return true; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
228 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
229 |
7620
c27c9695d130
mod_blocklist: Decrease priority of iq hooks to ease handling by other modules
Kim Alvefur <zash@zash.se>
parents:
7079
diff
changeset
|
230 module:hook("iq-set/self/urn:xmpp:blocking:block", edit_blocklist, -1); |
c27c9695d130
mod_blocklist: Decrease priority of iq hooks to ease handling by other modules
Kim Alvefur <zash@zash.se>
parents:
7079
diff
changeset
|
231 module:hook("iq-set/self/urn:xmpp:blocking:unblock", edit_blocklist, -1); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
232 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
233 -- Cache invalidation, solved! |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
234 module:hook_global("user-deleted", function (event) |
6629
42aeb882b3e1
mod_blocklist: Some cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6531
diff
changeset
|
235 if event.host == module.host then |
7079
f094683ae6eb
mod_blocklist: Clear second level cache correctly on user deletion
Kim Alvefur <zash@zash.se>
parents:
6976
diff
changeset
|
236 cache2:set(event.username, nil); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
237 cache[event.username] = nil; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
238 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
239 end); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
240 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
241 -- Buggy clients |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
242 module:hook("iq-error/self/blocklist-push", function (event) |
7968
f0e35f4db9e0
mod_blocklist: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7775
diff
changeset
|
243 local origin, stanza = event.origin, event.stanza; |
8040
62c540d51d50
mod_blocklist: Use local variable [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7968
diff
changeset
|
244 local _, condition, text = stanza:get_error(); |
7968
f0e35f4db9e0
mod_blocklist: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7775
diff
changeset
|
245 local log = (origin.log or module._log); |
f0e35f4db9e0
mod_blocklist: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7775
diff
changeset
|
246 log("warn", "Client returned an error in response to notification from mod_%s: %s%s%s", |
f0e35f4db9e0
mod_blocklist: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7775
diff
changeset
|
247 module.name, condition, text and ": " or "", text or ""); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
248 return true; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
249 end); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
250 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
251 local function is_blocked(user, jid) |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
252 local blocklist = cache[user] or get_blocklist(user); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
253 if blocklist[jid] then return true; end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
254 local node, host = jid_split(jid); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
255 return blocklist[host] or node and blocklist[node..'@'..host]; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
256 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
257 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
258 -- Event handlers for bouncing or dropping stanzas |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
259 local function drop_stanza(event) |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
260 local stanza = event.stanza; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
261 local attr = stanza.attr; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
262 local to, from = attr.to, attr.from; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
263 to = to and jid_split(to); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
264 if to and from then |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
265 return is_blocked(to, from); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
266 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
267 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
268 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
269 local function bounce_stanza(event) |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
270 local origin, stanza = event.origin, event.stanza; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
271 if drop_stanza(event) then |
6833
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
272 origin.send(st_error_reply(stanza, "cancel", "service-unavailable")); |
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
273 return true; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
274 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
275 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
276 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
277 local function bounce_iq(event) |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
278 local type = event.stanza.attr.type; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
279 if type == "set" or type == "get" then |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
280 return bounce_stanza(event); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
281 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
282 return drop_stanza(event); -- result or error |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
283 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
284 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
285 local function bounce_message(event) |
8275
13dad833e821
mod_blocklist: Drop messages to existing full JIDs in order to prevent issues with MUC PMs, fixes #690
Kim Alvefur <zash@zash.se>
parents:
8040
diff
changeset
|
286 local stanza = event.stanza; |
13dad833e821
mod_blocklist: Drop messages to existing full JIDs in order to prevent issues with MUC PMs, fixes #690
Kim Alvefur <zash@zash.se>
parents:
8040
diff
changeset
|
287 local type = stanza.attr.type; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
288 if type == "chat" or not type or type == "normal" then |
8275
13dad833e821
mod_blocklist: Drop messages to existing full JIDs in order to prevent issues with MUC PMs, fixes #690
Kim Alvefur <zash@zash.se>
parents:
8040
diff
changeset
|
289 if full_sessions[stanza.attr.to] then |
13dad833e821
mod_blocklist: Drop messages to existing full JIDs in order to prevent issues with MUC PMs, fixes #690
Kim Alvefur <zash@zash.se>
parents:
8040
diff
changeset
|
290 -- See #690 |
13dad833e821
mod_blocklist: Drop messages to existing full JIDs in order to prevent issues with MUC PMs, fixes #690
Kim Alvefur <zash@zash.se>
parents:
8040
diff
changeset
|
291 return drop_stanza(event); |
13dad833e821
mod_blocklist: Drop messages to existing full JIDs in order to prevent issues with MUC PMs, fixes #690
Kim Alvefur <zash@zash.se>
parents:
8040
diff
changeset
|
292 end |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
293 return bounce_stanza(event); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
294 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
295 return drop_stanza(event); -- drop headlines, groupchats etc |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
296 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
297 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
298 local function drop_outgoing(event) |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
299 local origin, stanza = event.origin, event.stanza; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
300 local username = origin.username or jid_split(stanza.attr.from); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
301 if not username then return end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
302 local to = stanza.attr.to; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
303 if to then return is_blocked(username, to); end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
304 -- nil 'to' means a self event, don't bock those |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
305 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
306 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
307 local function bounce_outgoing(event) |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
308 local origin, stanza = event.origin, event.stanza; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
309 local type = stanza.attr.type; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
310 if type == "error" or stanza.name == "iq" and type == "result" then |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
311 return drop_outgoing(event); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
312 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
313 if drop_outgoing(event) then |
6833
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
314 origin.send(st_error_reply(stanza, "cancel", "not-acceptable", "You have blocked this JID") |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
315 :tag("blocked", { xmlns = "urn:xmpp:blocking:errors" })); |
6833
aeb088bb1a20
mod_blocklist: Explicitly halt event propagation after returning a reply (send returns nil sometimes)
Kim Alvefur <zash@zash.se>
parents:
6629
diff
changeset
|
316 return true; |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
317 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
318 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
319 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
320 -- Hook all the events! |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
321 local prio_in, prio_out = 100, 100; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
322 module:hook("presence/bare", drop_stanza, prio_in); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
323 module:hook("presence/full", drop_stanza, prio_in); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
324 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
325 module:hook("message/bare", bounce_message, prio_in); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
326 module:hook("message/full", bounce_message, prio_in); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
327 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
328 module:hook("iq/bare", bounce_iq, prio_in); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
329 module:hook("iq/full", bounce_iq, prio_in); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
330 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
331 module:hook("pre-message/bare", bounce_outgoing, prio_out); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
332 module:hook("pre-message/full", bounce_outgoing, prio_out); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
333 module:hook("pre-message/host", bounce_outgoing, prio_out); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
334 |
8741
0fd63ed1f647
mod_blocklist: Allow mod_presence to handle subscription stanzas before bouncing outgoing presence (fixes #575)
Kim Alvefur <zash@zash.se>
parents:
8275
diff
changeset
|
335 module:hook("pre-presence/bare", bounce_outgoing, -1); |
0fd63ed1f647
mod_blocklist: Allow mod_presence to handle subscription stanzas before bouncing outgoing presence (fixes #575)
Kim Alvefur <zash@zash.se>
parents:
8275
diff
changeset
|
336 module:hook("pre-presence/host", bounce_outgoing, -1); |
0fd63ed1f647
mod_blocklist: Allow mod_presence to handle subscription stanzas before bouncing outgoing presence (fixes #575)
Kim Alvefur <zash@zash.se>
parents:
8275
diff
changeset
|
337 module:hook("pre-presence/full", bounce_outgoing, prio_out); |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
338 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
339 module:hook("pre-iq/bare", bounce_outgoing, prio_out); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
340 module:hook("pre-iq/full", bounce_outgoing, prio_out); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
341 module:hook("pre-iq/host", bounce_outgoing, prio_out); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
342 |