local jid_bare = require "util.jid".bare;
local uuid_generate = require "util.uuid".generate;
-require "core.modulemanager".load(module.host, "iq");
-
local xmlns_pubsub = "http://jabber.org/protocol/pubsub";
local xmlns_pubsub_errors = "http://jabber.org/protocol/pubsub#errors";
local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event";
local autocreate_on_publish = module:get_option_boolean("autocreate_on_publish", false);
local autocreate_on_subscribe = module:get_option_boolean("autocreate_on_subscribe", false);
+local pubsub_disco_name = module:get_option("name");
+if type(pubsub_disco_name) ~= "string" then pubsub_disco_name = "Prosody PubSub Service"; end
local service;
return origin.send(pubsub_error_reply(stanza, ret));
end
local reply = st.reply(stanza)
- :tag("subscriptions", { xmlns = xmlns_pubsub });
+ :tag("pubsub", { xmlns = xmlns_pubsub })
+ :tag("subscriptions");
for _, sub in ipairs(ret) do
reply:tag("subscription", { node = sub.node, jid = sub.jid, subscription = 'subscribed' }):up();
end
function handlers.set_subscribe(origin, stanza, subscribe)
local node, jid = subscribe.attr.node, subscribe.attr.jid;
- if jid_bare(jid) ~= jid_bare(stanza.attr.from) then
- return origin.send(pubsub_error_reply(stanza, "invalid-jid"));
- end
local ok, ret = service:add_subscription(node, stanza.attr.from, jid);
local reply;
if ok then
function handlers.set_unsubscribe(origin, stanza, unsubscribe)
local node, jid = unsubscribe.attr.node, unsubscribe.attr.jid;
- if jid_bare(jid) ~= jid_bare(stanza.attr.from) then
- return origin.send(pubsub_error_reply(stanza, "invalid-jid"));
- end
local ok, ret = service:remove_subscription(node, stanza.attr.from, jid);
local reply;
if ok then
local function build_disco_info(service)
local disco_info = st.stanza("query", { xmlns = "http://jabber.org/protocol/disco#info" })
- :tag("identity", { category = "pubsub", type = "service" }):up()
+ :tag("identity", { category = "pubsub", type = "service", name = pubsub_disco_name }):up()
:tag("feature", { var = "http://jabber.org/protocol/pubsub" }):up();
add_disco_features_from_service(disco_info, service);
return disco_info;
end
local reply = st.reply(stanza)
- :tag("query", { xmlns = xmlns_disco_items });
+ :tag("query", { xmlns = "http://jabber.org/protocol/disco#items", node = node });
for id, item in pairs(ret) do
reply:tag("item", { jid = module.host, name = id }):up();
get_affiliation = get_affiliation;
normalize_jid = jid_bare;
-}));
+}));
\ No newline at end of file