Comparison

plugins/mod_pubsub.lua @ 5312:fdcd2ac7c22d

mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
author Florian Zeitz <florob@babelmonkeys.de>
date Fri, 25 Jan 2013 01:32:14 +0100
parent 5308:fd3219d64414
child 5313:3d63f5236464
comparison
equal deleted inserted replaced
5311:86fe6e2fa5ae 5312:fdcd2ac7c22d
4 local uuid_generate = require "util.uuid".generate; 4 local uuid_generate = require "util.uuid".generate;
5 5
6 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; 6 local xmlns_pubsub = "http://jabber.org/protocol/pubsub";
7 local xmlns_pubsub_errors = "http://jabber.org/protocol/pubsub#errors"; 7 local xmlns_pubsub_errors = "http://jabber.org/protocol/pubsub#errors";
8 local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event"; 8 local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event";
9 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner";
9 10
10 local autocreate_on_publish = module:get_option_boolean("autocreate_on_publish", false); 11 local autocreate_on_publish = module:get_option_boolean("autocreate_on_publish", false);
11 local autocreate_on_subscribe = module:get_option_boolean("autocreate_on_subscribe", false); 12 local autocreate_on_subscribe = module:get_option_boolean("autocreate_on_subscribe", false);
12 local pubsub_disco_name = module:get_option("name"); 13 local pubsub_disco_name = module:get_option("name");
13 if type(pubsub_disco_name) ~= "string" then pubsub_disco_name = "Prosody PubSub Service"; end 14 if type(pubsub_disco_name) ~= "string" then pubsub_disco_name = "Prosody PubSub Service"; end
199 end 200 end
200 201
201 function handlers.set_purge(origin, stanza, purge) 202 function handlers.set_purge(origin, stanza, purge)
202 local node, notify = purge.attr.node, purge.attr.notify; 203 local node, notify = purge.attr.node, purge.attr.notify;
203 notify = (notify == "1") or (notify == "true"); 204 notify = (notify == "1") or (notify == "true");
204 local reply, notifier; 205 local reply;
205 if not node then 206 if not node then
206 origin.send(st.error_reply(stanza, "modify", "bad-request")); 207 origin.send(st.error_reply(stanza, "modify", "bad-request"));
207 return true; 208 return true;
208 end 209 end
209 if notify then 210 local ok, ret = service:purge(node, stanza.attr.from, notify);
210 notifier = st.stanza("purge");
211 end
212 local ok, ret = service:purge(node, stanza.attr.from, notifier);
213 if ok then 211 if ok then
214 reply = st.reply(stanza); 212 reply = st.reply(stanza);
215 else 213 else
216 reply = pubsub_error_reply(stanza, ret); 214 reply = pubsub_error_reply(stanza, ret);
217 end 215 end
218 return origin.send(reply); 216 return origin.send(reply);
219 end 217 end
220 218
221 function simple_broadcast(node, jids, item) 219 function simple_broadcast(kind, node, jids, item)
222 item = st.clone(item); 220 if item then
223 item.attr.xmlns = nil; -- Clear the pubsub namespace 221 item = st.clone(item);
222 item.attr.xmlns = nil; -- Clear the pubsub namespace
223 end
224 local message = st.message({ from = module.host, type = "headline" }) 224 local message = st.message({ from = module.host, type = "headline" })
225 :tag("event", { xmlns = xmlns_pubsub_event }) 225 :tag("event", { xmlns = xmlns_pubsub_event })
226 :tag("items", { node = node }) 226 :tag(kind, { node = node })
227 :add_child(item); 227 :add_child(item);
228 for jid in pairs(jids) do 228 for jid in pairs(jids) do
229 module:log("debug", "Sending notification to %s", jid); 229 module:log("debug", "Sending notification to %s", jid);
230 message.attr.to = jid; 230 message.attr.to = jid;
231 module:send(message); 231 module:send(message);
232 end 232 end
233 end 233 end
234 234
235 module:hook("iq/host/http://jabber.org/protocol/pubsub:pubsub", handle_pubsub_iq); 235 module:hook("iq/host/"..xmlns_pubsub..":pubsub", handle_pubsub_iq);
236 module:hook("iq/host/"..xmlns_pubsub_owner..":pubsub", handle_pubsub_iq);
236 237
237 local disco_info; 238 local disco_info;
238 239
239 local feature_map = { 240 local feature_map = {
240 create = { "create-nodes", "instant-nodes", "item-ids" }; 241 create = { "create-nodes", "instant-nodes", "item-ids" };