Software /
code /
prosody
Changeset
8340:7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 18 Oct 2017 09:38:45 +0200 |
parents | 8339:4fce6bc0719f |
children | 8341:910d3c3f60a6 |
files | plugins/mod_pubsub/mod_pubsub.lua plugins/mod_pubsub/pubsub.lib.lua |
diffstat | 2 files changed, 51 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/mod_pubsub/mod_pubsub.lua Wed Oct 18 09:24:35 2017 +0200 +++ b/plugins/mod_pubsub/mod_pubsub.lua Wed Oct 18 09:38:45 2017 +0200 @@ -60,33 +60,9 @@ module:hook("iq/host/"..xmlns_pubsub..":pubsub", handle_pubsub_iq); module:hook("iq/host/"..xmlns_pubsub_owner..":pubsub", handle_pubsub_iq); -local feature_map = { - create = { "create-nodes", "instant-nodes", "item-ids", "create-and-configure" }; - retract = { "delete-items", "retract-items" }; - purge = { "purge-nodes" }; - publish = { "publish", autocreate_on_publish and "auto-create" }; - delete = { "delete-nodes" }; - get_items = { "retrieve-items" }; - add_subscription = { "subscribe" }; - get_subscriptions = { "retrieve-subscriptions" }; - set_node_config = { "config-node" }; - node_defaults = { "retrieve-default" }; -}; - local function add_disco_features_from_service(service) - for method, features in pairs(feature_map) do - if service[method] then - for _, feature in ipairs(features) do - if feature then - module:add_feature(xmlns_pubsub.."#"..feature); - end - end - end - end - for affiliation in pairs(service.config.capabilities) do - if affiliation ~= "none" and affiliation ~= "owner" then - module:add_feature(xmlns_pubsub.."#"..affiliation.."-affiliation"); - end + for feature in lib_pubsub.get_feature_set(service) do + module:add_feature(xmlns_pubsub.."#"..feature); end end
--- a/plugins/mod_pubsub/pubsub.lib.lua Wed Oct 18 09:24:35 2017 +0200 +++ b/plugins/mod_pubsub/pubsub.lib.lua Wed Oct 18 09:38:45 2017 +0200 @@ -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 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];