mod_pubsub: Add support for modifying subscriptions

https://xmpp.org/extensions/xep-0060.html#owner-subscriptions-modify
remotes/origin/0.11
Kim Alvefur 8 years ago
parent e18193a4ff
commit c80aae6dee
  1. 38
      plugins/mod_pubsub/pubsub.lib.lua

@ -267,6 +267,44 @@ function handlers.owner_get_subscriptions(origin, stanza, subscriptions, service
return true;
end
function handlers.owner_set_subscriptions(origin, stanza, subscriptions, service)
local node = subscriptions.attr.node;
if not node then
origin.send(pubsub_error_reply(stanza, "nodeid-required"));
return true;
end
if not service:may(node, stanza.attr.from, "subscribe_other") then
origin.send(pubsub_error_reply(stanza, "forbidden"));
return true;
end
local node_obj = service.nodes[node];
if not node_obj then
origin.send(pubsub_error_reply(stanza, "item-not-found"));
return true;
end
for subscription_tag in subscriptions:childtags("subscription") do
if subscription_tag.attr.subscription == 'subscribed' then
local ok, err = service:add_subscription(node, stanza.attr.from, subscription_tag.attr.jid);
if not ok then
origin.send(pubsub_error_reply(stanza, err));
return true;
end
elseif subscription_tag.attr.subscription == 'none' then
local ok, err = service:remove_subscription(node, stanza.attr.from, subscription_tag.attr.jid);
if not ok then
origin.send(pubsub_error_reply(stanza, err));
return true;
end
end
end
local reply = st.reply(stanza);
origin.send(reply);
return true;
end
function handlers.set_create(origin, stanza, create, service)
local node = create.attr.node;
local ok, ret, reply;

Loading…
Cancel
Save