Software /
code /
prosody
Annotate
plugins/mod_blocklist.lua @ 10682:62ef68f95b6f 0.11
mod_mam,mod_muc_mam: Allow other work to be performed during archive cleanup (fixes #1504)
This lets Prosody handle socket related work between each step in the
cleanup in order to prevent the server from being completely blocked
during this.
An async storage backend would not need this but those are currently
rare.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 11 Mar 2020 21:15:01 +0100 |
parent | 10052:0c35f353db68 |
child | 10053:4b2cc8a60449 |
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 |
7fd26815fcf6
mod_blocklist: Remove one indentation level
Kim Alvefur <zash@zash.se>
parents:
7772
diff
changeset
|
70 module:log("warn", "Invalid JID in privacy store for user '%s' not migrated: %s", username, tostring(item.value)); |
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 = { |
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
|
165 -- We set the [false] key to someting 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 |
f350f840a6f7
mod_blocklist: Restructure how we keep track of where to send unavailable presence
Kim Alvefur <zash@zash.se>
parents:
6972
diff
changeset
|
192 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
|
193 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
|
194 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
|
195 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
|
196 end |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
197 end |
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 |
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
|
200 |
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 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
|
202 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
|
203 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
|
204 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
|
205 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
|
206 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
|
207 -- 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
|
208 end |
10052
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
209 else |
0c35f353db68
mod_blocklist: Trigger resend of presence when unblocking a contact (fixes #1380)
Kim Alvefur <zash@zash.se>
parents:
9248
diff
changeset
|
210 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
|
211 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
|
212 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
|
213 end |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
214 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
|
215 |
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 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
|
217 :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
|
218 |
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
|
219 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
|
220 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
|
221 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
|
222 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
|
223 end |
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 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
226 return true; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
227 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
228 |
7620
c27c9695d130
mod_blocklist: Decrease priority of iq hooks to ease handling by other modules
Kim Alvefur <zash@zash.se>
parents:
7079
diff
changeset
|
229 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
|
230 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
|
231 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
232 -- 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
|
233 module:hook_global("user-deleted", function (event) |
6629
42aeb882b3e1
mod_blocklist: Some cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6531
diff
changeset
|
234 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
|
235 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
|
236 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
|
237 end |
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 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
240 -- Buggy clients |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
241 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
|
242 local origin, stanza = event.origin, event.stanza; |
8040
62c540d51d50
mod_blocklist: Use local variable [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7968
diff
changeset
|
243 local _, condition, text = stanza:get_error(); |
7968
f0e35f4db9e0
mod_blocklist: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7775
diff
changeset
|
244 local log = (origin.log or module._log); |
f0e35f4db9e0
mod_blocklist: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7775
diff
changeset
|
245 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
|
246 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
|
247 return true; |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
248 end); |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
249 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
250 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
|
251 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
|
252 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
|
253 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
|
254 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
|
255 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
256 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
257 -- 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
|
258 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
|
259 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
|
260 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
|
261 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
|
262 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
|
263 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
|
264 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
|
265 end |
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 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
268 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
|
269 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
|
270 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
|
271 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
|
272 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
|
273 end |
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 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
276 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
|
277 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
|
278 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
|
279 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
|
280 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
281 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
|
282 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
283 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
284 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
|
285 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
|
286 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
|
287 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
|
288 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
|
289 -- 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
|
290 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
|
291 end |
6344
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
292 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
|
293 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
294 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
|
295 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
296 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
297 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
|
298 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
|
299 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
|
300 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
|
301 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
|
302 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
|
303 -- 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
|
304 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
305 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
306 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
|
307 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
|
308 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
|
309 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
|
310 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
|
311 end |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
312 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
|
313 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
|
314 :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
|
315 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
|
316 end |
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 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
319 -- 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
|
320 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
|
321 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
|
322 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
|
323 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
324 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
|
325 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
|
326 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
327 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
|
328 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
|
329 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
330 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
|
331 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
|
332 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
|
333 |
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
|
334 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
|
335 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
|
336 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
|
337 |
68b5c1ed18dd
mod_blocklist: XEP-0191 implementation written for speed and independence from mod_privacy
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
338 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
|
339 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
|
340 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
|
341 |