Mercurial > prosody-modules
diff mod_blocking/mod_blocking.lua @ 164:0b238b2b0801
mod_blocking: Support for the "unblock all JIDs" case, and fix saving of rules after removing a JID
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 03 Jun 2010 11:20:26 +0100 |
parents | 9fe6d314fd07 |
children | 4f58ddade1db |
line wrap: on
line diff
--- a/mod_blocking/mod_blocking.lua Thu Jun 03 11:19:50 2010 +0100 +++ b/mod_blocking/mod_blocking.lua Thu Jun 03 11:20:26 2010 +0100 @@ -46,6 +46,24 @@ return true; end end + datamanager.store(username, host, "privacy", privacy_lists); +end + +function remove_all_blocked_jids(username, host) + local privacy_lists = datamanager.load(username, host, "privacy") or {}; + local default_list_name = privacy_lists.default; + if not default_list_name then return; end + local default_list = privacy_lists.list[default_list_name]; + if not default_list then return; end + local items = default_list.items; + local item; + for i=#items,1 do -- order must be unique + item = items[i]; + if item.type == "jid" and item.action == "deny" then + table.remove(items, i); + end + end + datamanager.store(username, host, "privacy", privacy_lists); end function get_blocked_jids(username, host) @@ -69,18 +87,23 @@ function handle_blocking_command(session, stanza) local username, host = jid_split(stanza.attr.from); - if stanza.attr.type == "set" and stanza.tags[1].name == "block" then - local block = stanza.tags[1]:get_child("block"); - local block_jid_list = {}; - for item in block:childtags() do - block_jid_list[#block_jid_list+1] = item.attr.jid; - end - if #block_jid_list == 0 then - --FIXME: Reply bad-request - else - for _, jid in ipairs(block_jid_list) do - add_blocked_jid(username, host, jid); + if stanza.attr.type == "set" then + if stanza.tags[1].name == "block" then + local block = stanza.tags[1]:get_child("block"); + local block_jid_list = {}; + for item in block:childtags() do + block_jid_list[#block_jid_list+1] = item.attr.jid; end + if #block_jid_list == 0 then + --FIXME: Reply bad-request + else + for _, jid in ipairs(block_jid_list) do + add_blocked_jid(username, host, jid); + end + session.send(st.reply(stanza)); + end + elseif stanza.tags[1].name == "unblock" then + remove_all_blocked_jids(username, host); session.send(st.reply(stanza)); end elseif stanza.attr.type == "get" and stanza.tags[1].name == "blocklist" then