Software /
code /
prosody-modules
Comparison
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 |
parent | 163:9fe6d314fd07 |
child | 173:4f58ddade1db |
comparison
equal
deleted
inserted
replaced
163:9fe6d314fd07 | 164:0b238b2b0801 |
---|---|
44 if item.type == "jid" and item.action == "deny" and item.value == jid then | 44 if item.type == "jid" and item.action == "deny" and item.value == jid then |
45 table.remove(items, i); | 45 table.remove(items, i); |
46 return true; | 46 return true; |
47 end | 47 end |
48 end | 48 end |
49 datamanager.store(username, host, "privacy", privacy_lists); | |
50 end | |
51 | |
52 function remove_all_blocked_jids(username, host) | |
53 local privacy_lists = datamanager.load(username, host, "privacy") or {}; | |
54 local default_list_name = privacy_lists.default; | |
55 if not default_list_name then return; end | |
56 local default_list = privacy_lists.list[default_list_name]; | |
57 if not default_list then return; end | |
58 local items = default_list.items; | |
59 local item; | |
60 for i=#items,1 do -- order must be unique | |
61 item = items[i]; | |
62 if item.type == "jid" and item.action == "deny" then | |
63 table.remove(items, i); | |
64 end | |
65 end | |
66 datamanager.store(username, host, "privacy", privacy_lists); | |
49 end | 67 end |
50 | 68 |
51 function get_blocked_jids(username, host) | 69 function get_blocked_jids(username, host) |
52 -- Return array of blocked JIDs in default privacy list | 70 -- Return array of blocked JIDs in default privacy list |
53 local privacy_lists = datamanager.load(username, host, "privacy") or {}; | 71 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
67 return jid_list; | 85 return jid_list; |
68 end | 86 end |
69 | 87 |
70 function handle_blocking_command(session, stanza) | 88 function handle_blocking_command(session, stanza) |
71 local username, host = jid_split(stanza.attr.from); | 89 local username, host = jid_split(stanza.attr.from); |
72 if stanza.attr.type == "set" and stanza.tags[1].name == "block" then | 90 if stanza.attr.type == "set" then |
73 local block = stanza.tags[1]:get_child("block"); | 91 if stanza.tags[1].name == "block" then |
74 local block_jid_list = {}; | 92 local block = stanza.tags[1]:get_child("block"); |
75 for item in block:childtags() do | 93 local block_jid_list = {}; |
76 block_jid_list[#block_jid_list+1] = item.attr.jid; | 94 for item in block:childtags() do |
77 end | 95 block_jid_list[#block_jid_list+1] = item.attr.jid; |
78 if #block_jid_list == 0 then | |
79 --FIXME: Reply bad-request | |
80 else | |
81 for _, jid in ipairs(block_jid_list) do | |
82 add_blocked_jid(username, host, jid); | |
83 end | 96 end |
97 if #block_jid_list == 0 then | |
98 --FIXME: Reply bad-request | |
99 else | |
100 for _, jid in ipairs(block_jid_list) do | |
101 add_blocked_jid(username, host, jid); | |
102 end | |
103 session.send(st.reply(stanza)); | |
104 end | |
105 elseif stanza.tags[1].name == "unblock" then | |
106 remove_all_blocked_jids(username, host); | |
84 session.send(st.reply(stanza)); | 107 session.send(st.reply(stanza)); |
85 end | 108 end |
86 elseif stanza.attr.type == "get" and stanza.tags[1].name == "blocklist" then | 109 elseif stanza.attr.type == "get" and stanza.tags[1].name == "blocklist" then |
87 local reply = st.reply(stanza):tag("blocklist", { xmlns = xmlns_block }); | 110 local reply = st.reply(stanza):tag("blocklist", { xmlns = xmlns_block }); |
88 local blocked_jids = get_blocked_jids(username, host); | 111 local blocked_jids = get_blocked_jids(username, host); |