Software /
code /
prosody-modules
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 |
parent | 372:000f1d1c6ca5 |
child | 1215: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); |