comparison mod_bookmarks/mod_bookmarks.lua @ 3294:947790ec4406

mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Fri, 31 Aug 2018 22:17:19 +0200
parents 87769f53fdc8
children 303b17ec8264
comparison
equal deleted inserted replaced
3293:f728c8c42860 3294:947790ec4406
1 local st = require "util.stanza"; 1 local st = require "util.stanza";
2 local jid_split = require "util.jid".split; 2 local jid_split = require "util.jid".split;
3 3
4 local mod_pep = module:depends "pep"; 4 local mod_pep = module:depends "pep";
5 local private_storage = module:open_store("private", "map"); 5 local private_storage = module:open_store("private", "map");
6
7 local default_options = {
8 ["persist_items"] = true;
9 ["access_model"] = "whitelist";
10 };
6 11
7 module:hook("account-disco-info", function (event) 12 module:hook("account-disco-info", function (event)
8 event.reply:tag("feature", { var = "urn:xmpp:bookmarks-conversion:0" }):up(); 13 event.reply:tag("feature", { var = "urn:xmpp:bookmarks-conversion:0" }):up();
9 end); 14 end);
10 15
46 51
47 function publish_to_pep(jid, bookmarks) 52 function publish_to_pep(jid, bookmarks)
48 local service = mod_pep.get_pep_service(jid_split(jid)); 53 local service = mod_pep.get_pep_service(jid_split(jid));
49 local item = st.stanza("item", { xmlns = "http://jabber.org/protocol/pubsub", id = "current" }) 54 local item = st.stanza("item", { xmlns = "http://jabber.org/protocol/pubsub", id = "current" })
50 :add_child(bookmarks); 55 :add_child(bookmarks);
51 local options = { 56 return service:publish("storage:bookmarks", jid, "current", item, default_options);
52 ["persist_items"] = true;
53 ["access_model"] = "whitelist";
54 };
55 return service:publish("storage:bookmarks", jid, "current", item, options);
56 end 57 end
57 58
58 -- Synchronise Private XML to PEP. 59 -- Synchronise Private XML to PEP.
59 local function on_publish_private_xml(event) 60 local function on_publish_private_xml(event)
60 local stanza, session = event.stanza, event.origin; 61 local stanza, session = event.stanza, event.origin;
121 122
122 local function on_item_published(event) 123 local function on_item_published(event)
123 module:fire_event("bookmarks/updated", event); 124 module:fire_event("bookmarks/updated", event);
124 end 125 end
125 126
127 local function on_node_created(event)
128 local service, node, actor = event.service, event.node, event.actor;
129 if node ~= "storage:bookmarks" then
130 return;
131 end
132 local node_config = service.nodes[node].config;
133 for config_field, value in pairs(default_options) do
134 node_config[config_field] = value;
135 end
136 end
137
126 module:hook("iq-get/bare/jabber:iq:private:query", on_retrieve_private_xml); 138 module:hook("iq-get/bare/jabber:iq:private:query", on_retrieve_private_xml);
127 module:hook("iq-set/bare/jabber:iq:private:query", on_publish_private_xml); 139 module:hook("iq-set/bare/jabber:iq:private:query", on_publish_private_xml);
128 module:hook("resource-bind", on_resource_bind); 140 module:hook("resource-bind", on_resource_bind);
129 module:hook("item-published/storage:bookmarks", on_item_published); 141 module:hook("item-published/storage:bookmarks", on_item_published);
142 module:hook("node-created", on_node_created);