mod_blocking/mod_blocking.lua
author Matthew Wild <mwild1@gmail.com>
Sun, 13 Jun 2010 19:51:15 +0100
changeset 174 d40982d130f0
parent 173 4f58ddade1db
child 175 92a72435721a
permissions -rw-r--r--
mod_blocking: Various small changes to make it actually work, which I forgot to commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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";
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
     3
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
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
     5
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
     6
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
     7
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
-- 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
     9
function add_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
    10
	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
    11
	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
    12
	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
    13
		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
    14
		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
    15
	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
    16
	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
    17
	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
    18
		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
    19
		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
    20
	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
    21
	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
    22
	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
    23
	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
    24
		items[i].order = items[i].order + 1;
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
	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
    26
	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
    27
		, 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
    28
		, 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
    29
		, 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
    30
		, ["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
    31
		, ["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
    32
		, 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
    33
		, order = order
173
4f58ddade1db mod_blocking: Fixed a syntax error.
Waqas Hussain <waqas20@gmail.com>
parents: 164
diff changeset
    34
	});
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
    35
	datamanager.store(username, host, "privacy", privacy_lists);
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
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
    37
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
-- 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
    39
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
    40
	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
    41
	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
    42
	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
    43
	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
    44
	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
    45
	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
    46
	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
    47
	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
    48
		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
    49
		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
    50
			table.remove(items, i);
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
			return true;
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
    52
		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
    53
	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
    54
	datamanager.store(username, host, "privacy", privacy_lists);
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
    55
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
    56
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
    57
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
    58
	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
    59
	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
    60
	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
    61
	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
    62
	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
    63
	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
    64
	local item;
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
    65
	for i=#items,1 do -- order must be unique
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
    66
		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
    67
		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
    68
			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
    69
		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
    70
	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
    71
	datamanager.store(username, host, "privacy", privacy_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
    72
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
    73
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
    74
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
    75
	-- 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
    76
	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
    77
	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
    78
	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
    79
	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
    80
	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
    81
	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
    82
	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
    83
	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
    84
	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
    85
		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
    86
		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
    87
			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
    88
		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
    89
	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
    90
	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
    91
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
    92
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
    93
function handle_blocking_command(session, stanza)
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
	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
    95
	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
    96
		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
    97
			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
    98
			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
    99
			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
   100
				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
   101
			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
   102
			if #block_jid_list == 0 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
   103
				--FIXME: Reply bad-request
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
   104
			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
   105
				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
   106
					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
   107
				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
   108
				session.send(st.reply(stanza));
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
   109
			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
   110
		elseif stanza.tags[1].name == "unblock" 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
   111
			remove_all_blocked_jids(username, host);
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
   112
			session.send(st.reply(stanza));
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
   113
		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
   114
	elseif stanza.attr.type == "get" and stanza.tags[1].name == "blocklist" 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
   115
		local reply = st.reply(stanza):tag("blocklist", { xmlns = xmlns_block });
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
   116
		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
   117
		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
   118
			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
   119
		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
   120
		session.send(reply);
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
   121
	else
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
   122
		--FIXME: Need to respond with service-unavailable
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
   123
	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
   124
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
   125
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
   126
module:add_iq_handler("c2s", xmlns_blocking, handle_blocking_command);