aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mod_pubsub/pubsub.lib.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2017-10-18 09:38:45 +0200
committerKim Alvefur <zash@zash.se>2017-10-18 09:38:45 +0200
commit7aa48bf4096cad84f7c2fd6d790cc2d4cb38a3b1 (patch)
tree4d2097de1c4ca9ae0c25743a0854ff290c4f5d43 /plugins/mod_pubsub/pubsub.lib.lua
parentb97c23393ad658dd84ad45aa974b24b0612fecad (diff)
downloadprosody-7aa48bf4096cad84f7c2fd6d790cc2d4cb38a3b1.tar.gz
prosody-7aa48bf4096cad84f7c2fd6d790cc2d4cb38a3b1.zip
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Diffstat (limited to 'plugins/mod_pubsub/pubsub.lib.lua')
-rw-r--r--plugins/mod_pubsub/pubsub.lib.lua49
1 files changed, 49 insertions, 0 deletions
diff --git a/plugins/mod_pubsub/pubsub.lib.lua b/plugins/mod_pubsub/pubsub.lib.lua
index ca9f7c9a..b9a7a8c1 100644
--- a/plugins/mod_pubsub/pubsub.lib.lua
+++ b/plugins/mod_pubsub/pubsub.lib.lua
@@ -1,6 +1,7 @@
local t_unpack = table.unpack or unpack; -- luacheck: ignore 113
local time_now = os.time;
+local set = require "util.set";
local st = require "util.stanza";
local it = require "util.iterators";
local uuid_generate = require "util.uuid".generate;
@@ -53,6 +54,54 @@ local node_config_form = dataform {
};
};
+local service_method_feature_map = {
+ add_subscription = { "subscribe" };
+ create = { "create-nodes", "instant-nodes", "item-ids", "create-and-configure" };
+ delete = { "delete-nodes" };
+ get_items = { "retrieve-items" };
+ get_subscriptions = { "retrieve-subscriptions" };
+ node_defaults = { "retrieve-default" };
+ publish = { "publish" };
+ purge = { "purge-nodes" };
+ retract = { "delete-items", "retract-items" };
+ set_node_config = { "config-node" };
+};
+local service_config_feature_map = {
+ autocreate_on_publish = { "auto-create" };
+};
+
+function _M.get_feature_set(service)
+ local supported_features = set.new();
+
+ for method, features in pairs(service_method_feature_map) do
+ if service[method] then
+ for _, feature in ipairs(features) do
+ if feature then
+ supported_features:add(feature);
+ end
+ end
+ end
+ end
+
+ for option, features in pairs(service_config_feature_map) do
+ if service.config[option] then
+ for _, feature in ipairs(features) do
+ if feature then
+ supported_features:add(feature);
+ end
+ end
+ end
+ end
+
+ for affiliation in pairs(service.config.capabilities) do
+ if affiliation ~= "none" and affiliation ~= "owner" then
+ supported_features:add(affiliation.."-affiliation");
+ end
+ end
+
+ return supported_features;
+end
+
function _M.handle_pubsub_iq(event, service)
local origin, stanza = event.origin, event.stanza;
local pubsub_tag = stanza.tags[1];