Software /
code /
prosody-modules
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 |
parent | 3290:87769f53fdc8 |
child | 3307: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); |