Mercurial > prosody-hg
comparison plugins/mod_pubsub/pubsub.lib.lua @ 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 | 30d8157391e9 |
| children | b52663586243 |
comparison
equal
deleted
inserted
replaced
| 8339:4fce6bc0719f | 8340:7c1fb8c042dc |
|---|---|
| 1 local t_unpack = table.unpack or unpack; -- luacheck: ignore 113 | 1 local t_unpack = table.unpack or unpack; -- luacheck: ignore 113 |
| 2 local time_now = os.time; | 2 local time_now = os.time; |
| 3 | 3 |
| 4 local set = require "util.set"; | |
| 4 local st = require "util.stanza"; | 5 local st = require "util.stanza"; |
| 5 local it = require "util.iterators"; | 6 local it = require "util.iterators"; |
| 6 local uuid_generate = require "util.uuid".generate; | 7 local uuid_generate = require "util.uuid".generate; |
| 7 local dataform = require"util.dataforms".new; | 8 local dataform = require"util.dataforms".new; |
| 8 | 9 |
| 51 name = "pubsub#persist_items"; | 52 name = "pubsub#persist_items"; |
| 52 label = "Persist items to storage"; | 53 label = "Persist items to storage"; |
| 53 }; | 54 }; |
| 54 }; | 55 }; |
| 55 | 56 |
| 57 local service_method_feature_map = { | |
| 58 add_subscription = { "subscribe" }; | |
| 59 create = { "create-nodes", "instant-nodes", "item-ids", "create-and-configure" }; | |
| 60 delete = { "delete-nodes" }; | |
| 61 get_items = { "retrieve-items" }; | |
| 62 get_subscriptions = { "retrieve-subscriptions" }; | |
| 63 node_defaults = { "retrieve-default" }; | |
| 64 publish = { "publish" }; | |
| 65 purge = { "purge-nodes" }; | |
| 66 retract = { "delete-items", "retract-items" }; | |
| 67 set_node_config = { "config-node" }; | |
| 68 }; | |
| 69 local service_config_feature_map = { | |
| 70 autocreate_on_publish = { "auto-create" }; | |
| 71 }; | |
| 72 | |
| 73 function _M.get_feature_set(service) | |
| 74 local supported_features = set.new(); | |
| 75 | |
| 76 for method, features in pairs(service_method_feature_map) do | |
| 77 if service[method] then | |
| 78 for _, feature in ipairs(features) do | |
| 79 if feature then | |
| 80 supported_features:add(feature); | |
| 81 end | |
| 82 end | |
| 83 end | |
| 84 end | |
| 85 | |
| 86 for option, features in pairs(service_config_feature_map) do | |
| 87 if service.config[option] then | |
| 88 for _, feature in ipairs(features) do | |
| 89 if feature then | |
| 90 supported_features:add(feature); | |
| 91 end | |
| 92 end | |
| 93 end | |
| 94 end | |
| 95 | |
| 96 for affiliation in pairs(service.config.capabilities) do | |
| 97 if affiliation ~= "none" and affiliation ~= "owner" then | |
| 98 supported_features:add(affiliation.."-affiliation"); | |
| 99 end | |
| 100 end | |
| 101 | |
| 102 return supported_features; | |
| 103 end | |
| 104 | |
| 56 function _M.handle_pubsub_iq(event, service) | 105 function _M.handle_pubsub_iq(event, service) |
| 57 local origin, stanza = event.origin, event.stanza; | 106 local origin, stanza = event.origin, event.stanza; |
| 58 local pubsub_tag = stanza.tags[1]; | 107 local pubsub_tag = stanza.tags[1]; |
| 59 local action = pubsub_tag.tags[1]; | 108 local action = pubsub_tag.tags[1]; |
| 60 if not action then | 109 if not action then |
