Mercurial > prosody-modules
annotate mod_blocking/mod_blocking.lua @ 5298:12f7d8b901e0
mod_audit: Support for adding location (GeoIP) to audit events
This can be more privacy-friendly than logging full IP addresses, and also
more informative to a user - IP addresses don't mean much to the average
person, however if they see activity from outside their expected country, they
can immediately identify suspicious activity.
As with IPs, this field is configurable for deployments that would like to
disable it. Location is also not logged when the geoip library is not
available.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 01 Apr 2023 13:11:53 +0100 |
parents | 1856c3aae92d |
children |
rev | line source |
---|---|
174
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
1 local jid_split = require "util.jid".split; |
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
2 local st = require "util.stanza"; |
1796
1e9a06caa866
mod_blocking: Import datamanager (thanks kriztan)
Kim Alvefur <zash@zash.se>
parents:
1215
diff
changeset
|
3 local datamanager = require"util.datamanager"; |
174
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
4 |
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
5 local xmlns_blocking = "urn:xmpp:blocking"; |
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
6 |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 module:add_feature("urn:xmpp:blocking"); |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 -- Add JID to default privacy list |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 function add_blocked_jid(username, host, jid) |
372
000f1d1c6ca5
mod_blocking: Properly initialize the bootstrap privacy storage
Paul Aurich <paul@darkrain42.org>
parents:
262
diff
changeset
|
11 local privacy_lists = datamanager.load(username, host, "privacy") or {lists = {}}; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 local default_list_name = privacy_lists.default; |
1215
1b55d8f86644
mod_blocking: Make sure that there is a lists item in the privacy store
Kim Alvefur <zash@zash.se>
parents:
940
diff
changeset
|
13 if not privacy_lists.lists then |
1b55d8f86644
mod_blocking: Make sure that there is a lists item in the privacy store
Kim Alvefur <zash@zash.se>
parents:
940
diff
changeset
|
14 privacy_lists.lists = {} |
1b55d8f86644
mod_blocking: Make sure that there is a lists item in the privacy store
Kim Alvefur <zash@zash.se>
parents:
940
diff
changeset
|
15 end |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 if not default_list_name then |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 default_list_name = "blocklist"; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 privacy_lists.default = default_list_name; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 end |
174
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
20 local default_list = privacy_lists.lists[default_list_name]; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 if not default_list then |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 default_list = { name = default_list_name, items = {} }; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 privacy_lists.lists[default_list_name] = default_list; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 local items = default_list.items; |
174
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
26 local order = items[1] and items[1].order or 0; -- Must come first |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 for i=1,#items do -- order must be unique |
176
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
28 local item = items[i]; |
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
29 item.order = item.order + 1; |
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
30 if item.type == "jid" and item.action == "deny" and item.value == jid then |
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
31 return false; |
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
32 end |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 table.insert(items, 1, { type = "jid" |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 , action = "deny" |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 , value = jid |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 , message = false |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 , ["presence-out"] = false |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 , ["presence-in"] = false |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 , iq = false |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 , order = order |
173
4f58ddade1db
mod_blocking: Fixed a syntax error.
Waqas Hussain <waqas20@gmail.com>
parents:
164
diff
changeset
|
42 }); |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 datamanager.store(username, host, "privacy", privacy_lists); |
176
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
44 return true; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 -- Remove JID from default privacy list |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 function remove_blocked_jid(username, host, jid) |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 local default_list_name = privacy_lists.default; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 if not default_list_name then return; end |
174
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
52 local default_list = privacy_lists.lists[default_list_name]; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 if not default_list then return; end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 local items = default_list.items; |
176
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
55 local item, removed = nil, false; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 for i=1,#items do -- order must be unique |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 item = items[i]; |
163
9fe6d314fd07
mod_blocking: Only count rules with action == "deny" as blocked JIDs
Matthew Wild <mwild1@gmail.com>
parents:
161
diff
changeset
|
58 if item.type == "jid" and item.action == "deny" and item.value == jid then |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 table.remove(items, i); |
176
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
60 removed = true; |
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
61 break; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 end |
176
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
64 if removed then |
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
65 datamanager.store(username, host, "privacy", privacy_lists); |
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
66 end |
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
67 return removed; |
164
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
68 end |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
69 |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
70 function remove_all_blocked_jids(username, host) |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
71 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
72 local default_list_name = privacy_lists.default; |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
73 if not default_list_name then return; end |
174
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
74 local default_list = privacy_lists.lists[default_list_name]; |
164
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
75 if not default_list then return; end |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
76 local items = default_list.items; |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
77 local item; |
177
bcd7dc51a5e3
mod_blocking: Fix to iterate over blocklist correctly when removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
176
diff
changeset
|
78 for i=#items,1,-1 do -- order must be unique |
164
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
79 item = items[i]; |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
80 if item.type == "jid" and item.action == "deny" then |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
81 table.remove(items, i); |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
82 end |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
83 end |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
84 datamanager.store(username, host, "privacy", privacy_lists); |
176
26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
Matthew Wild <mwild1@gmail.com>
parents:
175
diff
changeset
|
85 return true; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 function get_blocked_jids(username, host) |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 -- Return array of blocked JIDs in default privacy list |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 local default_list_name = privacy_lists.default; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 if not default_list_name then return {}; end |
174
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
93 local default_list = privacy_lists.lists[default_list_name]; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 if not default_list then return {}; end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 local items = default_list.items; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 local item; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 local jid_list = {}; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 for i=1,#items do -- order must be unique |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 item = items[i]; |
163
9fe6d314fd07
mod_blocking: Only count rules with action == "deny" as blocked JIDs
Matthew Wild <mwild1@gmail.com>
parents:
161
diff
changeset
|
100 if item.type == "jid" and item.action == "deny" then |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 jid_list[#jid_list+1] = item.value; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 return jid_list; |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 |
940
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
107 local function send_push_iqs(username, host, command_type, jids) |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
108 local bare_jid = username.."@"..host; |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
109 |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
110 local stanza_content = st.stanza(command_type, { xmlns = xmlns_blocking }); |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
111 for _, jid in ipairs(jids) do |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
112 stanza_content:tag("item", { jid = jid }):up(); |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
113 end |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
114 |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
115 for resource, session in pairs(prosody.bare_sessions[bare_jid].sessions) do |
3318
1856c3aae92d
mod_blocking: Update to set id attribute on iq stanza
Matthew Wild <mwild1@gmail.com>
parents:
1796
diff
changeset
|
116 local iq_push_stanza = st.iq({ type = "set", to = bare_jid.."/"..resource, id = "blocking-push" }); |
940
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
117 iq_push_stanza:add_child(stanza_content); |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
118 session.send(iq_push_stanza); |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
119 end |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
120 end |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
121 |
262
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
122 function handle_blocking_command(event) |
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
123 local session, stanza = event.origin, event.stanza; |
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
124 |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 local username, host = jid_split(stanza.attr.from); |
164
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
126 if stanza.attr.type == "set" then |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
127 if stanza.tags[1].name == "block" then |
174
d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Matthew Wild <mwild1@gmail.com>
parents:
173
diff
changeset
|
128 local block = stanza.tags[1]; |
164
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
129 local block_jid_list = {}; |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
130 for item in block:childtags() do |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
131 block_jid_list[#block_jid_list+1] = item.attr.jid; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 end |
164
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
133 if #block_jid_list == 0 then |
262
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
134 session.send(st.error_reply(stanza, "modify", "bad-request")); |
164
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
135 else |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
136 for _, jid in ipairs(block_jid_list) do |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
137 add_blocked_jid(username, host, jid); |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
138 end |
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
139 session.send(st.reply(stanza)); |
940
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
140 send_push_iqs(username, host, "block", block_jid_list); |
164
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
141 end |
262
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
142 return true; |
164
0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
Matthew Wild <mwild1@gmail.com>
parents:
163
diff
changeset
|
143 elseif stanza.tags[1].name == "unblock" then |
940
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
144 local unblock = stanza.tags[1]; |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
145 local unblock_jid_list = {}; |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
146 for item in unblock:childtags() do |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
147 unblock_jid_list[#unblock_jid_list+1] = item.attr.jid; |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
148 end |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
149 if #unblock_jid_list == 0 then |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
150 remove_all_blocked_jids(username, host); |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
151 else |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
152 for _, jid_to_unblock in ipairs(unblock_jid_list) do |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
153 remove_blocked_jid(username, host, jid_to_unblock); |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
154 end |
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
155 end |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 session.send(st.reply(stanza)); |
940
80ede103d7a3
mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
Tobias Markmann <tm@ayena.de>
parents:
372
diff
changeset
|
157 send_push_iqs(username, host, "unblock", unblock_jid_list); |
262
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
158 return true; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 elseif stanza.attr.type == "get" and stanza.tags[1].name == "blocklist" then |
175
92a72435721a
mod_blocking: Fixed a nil global access.
Waqas Hussain <waqas20@gmail.com>
parents:
174
diff
changeset
|
161 local reply = st.reply(stanza):tag("blocklist", { xmlns = xmlns_blocking }); |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 local blocked_jids = get_blocked_jids(username, host); |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 for _, jid in ipairs(blocked_jids) do |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 reply:tag("item", { jid = jid }):up(); |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
166 session.send(reply); |
262
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
167 return true; |
161
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
168 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
169 end |
fda7faee7677
mod_blocking: XEP-0191 Simple Communications Blocking, should work, but not tested. Requires mod_privacy be loaded.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 |
262
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
171 module:hook("iq/self/urn:xmpp:blocking:blocklist", handle_blocking_command); |
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
172 module:hook("iq/self/urn:xmpp:blocking:block", handle_blocking_command); |
4986ffe35704
mod_blocking: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
173 module:hook("iq/self/urn:xmpp:blocking:unblock", handle_blocking_command); |