comparison mod_blocking/mod_blocking.lua @ 940:80ede103d7a3

mod_blocking: Fix handling of unblocking command. Send out un-/block pushes to all resources.
author Tobias Markmann <tm@ayena.de>
date Wed, 27 Mar 2013 13:29:38 +0100
parents 000f1d1c6ca5
children 1b55d8f86644
comparison
equal deleted inserted replaced
939:1415fc2a0ac0 940:80ede103d7a3
98 end 98 end
99 end 99 end
100 return jid_list; 100 return jid_list;
101 end 101 end
102 102
103 local function send_push_iqs(username, host, command_type, jids)
104 local bare_jid = username.."@"..host;
105
106 local stanza_content = st.stanza(command_type, { xmlns = xmlns_blocking });
107 for _, jid in ipairs(jids) do
108 stanza_content:tag("item", { jid = jid }):up();
109 end
110
111 for resource, session in pairs(prosody.bare_sessions[bare_jid].sessions) do
112 local iq_push_stanza = st.iq({ type = "set", to = bare_jid.."/"..resource });
113 iq_push_stanza:add_child(stanza_content);
114 session.send(iq_push_stanza);
115 end
116 end
117
103 function handle_blocking_command(event) 118 function handle_blocking_command(event)
104 local session, stanza = event.origin, event.stanza; 119 local session, stanza = event.origin, event.stanza;
105 120
106 local username, host = jid_split(stanza.attr.from); 121 local username, host = jid_split(stanza.attr.from);
107 if stanza.attr.type == "set" then 122 if stanza.attr.type == "set" then
116 else 131 else
117 for _, jid in ipairs(block_jid_list) do 132 for _, jid in ipairs(block_jid_list) do
118 add_blocked_jid(username, host, jid); 133 add_blocked_jid(username, host, jid);
119 end 134 end
120 session.send(st.reply(stanza)); 135 session.send(st.reply(stanza));
136 send_push_iqs(username, host, "block", block_jid_list);
121 end 137 end
122 return true; 138 return true;
123 elseif stanza.tags[1].name == "unblock" then 139 elseif stanza.tags[1].name == "unblock" then
124 remove_all_blocked_jids(username, host); 140 local unblock = stanza.tags[1];
141 local unblock_jid_list = {};
142 for item in unblock:childtags() do
143 unblock_jid_list[#unblock_jid_list+1] = item.attr.jid;
144 end
145 if #unblock_jid_list == 0 then
146 remove_all_blocked_jids(username, host);
147 else
148 for _, jid_to_unblock in ipairs(unblock_jid_list) do
149 remove_blocked_jid(username, host, jid_to_unblock);
150 end
151 end
125 session.send(st.reply(stanza)); 152 session.send(st.reply(stanza));
153 send_push_iqs(username, host, "unblock", unblock_jid_list);
126 return true; 154 return true;
127 end 155 end
128 elseif stanza.attr.type == "get" and stanza.tags[1].name == "blocklist" then 156 elseif stanza.attr.type == "get" and stanza.tags[1].name == "blocklist" then
129 local reply = st.reply(stanza):tag("blocklist", { xmlns = xmlns_blocking }); 157 local reply = st.reply(stanza):tag("blocklist", { xmlns = xmlns_blocking });
130 local blocked_jids = get_blocked_jids(username, host); 158 local blocked_jids = get_blocked_jids(username, host);