Software /
code /
prosody-modules
Annotate
mod_bookmarks2/mod_bookmarks2.lua @ 4838:fd2e48d4ac94
mod_bookmarks2: Advertise XEP-0049 support
In the case mod_private isn’t loaded, some clients (like poezio) won’t even
attempt to use Private XML Storage unless this feature is advertised. This is
on the domain JID and not on the account JID!
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sun, 26 Dec 2021 14:51:35 +0100 |
parent | 4837:1f1acb7f3c10 |
child | 4839:797b51043767 |
rev | line source |
---|---|
3678
7575399ae544
mod_bookmarks, mod_bookmarks2: Refuse to load if the other one is also loaded.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3677
diff
changeset
|
1 local mm = require "core.modulemanager"; |
7575399ae544
mod_bookmarks, mod_bookmarks2: Refuse to load if the other one is also loaded.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3677
diff
changeset
|
2 if mm.get_modules_for_host(module.host):contains("bookmarks") then |
7575399ae544
mod_bookmarks, mod_bookmarks2: Refuse to load if the other one is also loaded.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3677
diff
changeset
|
3 error("mod_bookmarks2 and mod_bookmarks are conflicting, please disable one of them.", 0); |
7575399ae544
mod_bookmarks, mod_bookmarks2: Refuse to load if the other one is also loaded.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3677
diff
changeset
|
4 end |
7575399ae544
mod_bookmarks, mod_bookmarks2: Refuse to load if the other one is also loaded.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3677
diff
changeset
|
5 |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
6 local st = require "util.stanza"; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
7 local jid_split = require "util.jid".split; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
8 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
9 local mod_pep = module:depends "pep"; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
10 local private_storage = module:open_store("private", "map"); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
11 |
4640
d835cb7d2b47
mod_bookmarks2: Update namespace to :1
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4639
diff
changeset
|
12 local namespace = "urn:xmpp:bookmarks:1"; |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
13 local namespace_private = "jabber:iq:private"; |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
14 local namespace_legacy = "storage:bookmarks"; |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
15 |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
16 local default_options = { |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
17 ["persist_items"] = true; |
3678
7575399ae544
mod_bookmarks, mod_bookmarks2: Refuse to load if the other one is also loaded.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3677
diff
changeset
|
18 -- This should be much higher, the XEP recommends 10000 but mod_pep rejects that. |
4719
5a06c711649c
mod_bookmarks2: Use max_items='max' on trunk, with fallback
Kim Alvefur <zash@zash.se>
parents:
4688
diff
changeset
|
19 ["max_items"] = "max"; |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
20 ["send_last_published_item"] = "never"; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
21 ["access_model"] = "whitelist"; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
22 }; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
23 |
4719
5a06c711649c
mod_bookmarks2: Use max_items='max' on trunk, with fallback
Kim Alvefur <zash@zash.se>
parents:
4688
diff
changeset
|
24 if not pcall(mod_pep.check_node_config, nil, nil, default_options) then |
5a06c711649c
mod_bookmarks2: Use max_items='max' on trunk, with fallback
Kim Alvefur <zash@zash.se>
parents:
4688
diff
changeset
|
25 -- 0.11 or earlier not supporting max_items="max" trows an error here |
5a06c711649c
mod_bookmarks2: Use max_items='max' on trunk, with fallback
Kim Alvefur <zash@zash.se>
parents:
4688
diff
changeset
|
26 module:log("debug", "Setting max_items=pep_max_items because 'max' is not supported in this version"); |
5a06c711649c
mod_bookmarks2: Use max_items='max' on trunk, with fallback
Kim Alvefur <zash@zash.se>
parents:
4688
diff
changeset
|
27 default_options["max_items"] = module:get_option_number("pep_max_items", 256); |
5a06c711649c
mod_bookmarks2: Use max_items='max' on trunk, with fallback
Kim Alvefur <zash@zash.se>
parents:
4688
diff
changeset
|
28 end |
5a06c711649c
mod_bookmarks2: Use max_items='max' on trunk, with fallback
Kim Alvefur <zash@zash.se>
parents:
4688
diff
changeset
|
29 |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
30 module:hook("account-disco-info", function (event) |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
31 -- This Time it’s Serious! |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
32 event.reply:tag("feature", { var = namespace.."#compat" }):up(); |
4835
60b2dbe032c0
mod_bookmarks2: Finally add the #compat-pep feature!
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4834
diff
changeset
|
33 event.reply:tag("feature", { var = namespace.."#compat-pep" }):up(); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
34 end); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
35 |
4838
fd2e48d4ac94
mod_bookmarks2: Advertise XEP-0049 support
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4837
diff
changeset
|
36 -- This must be declared on the domain JID, not the account JID. Note that |
fd2e48d4ac94
mod_bookmarks2: Advertise XEP-0049 support
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4837
diff
changeset
|
37 -- this isn’t defined in the XEP. |
fd2e48d4ac94
mod_bookmarks2: Advertise XEP-0049 support
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4837
diff
changeset
|
38 module:add_feature(namespace_private); |
fd2e48d4ac94
mod_bookmarks2: Advertise XEP-0049 support
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4837
diff
changeset
|
39 |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
40 local function generate_legacy_storage(items) |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
41 local storage = st.stanza("storage", { xmlns = namespace_legacy }); |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
42 for _, item_id in ipairs(items) do |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
43 local item = items[item_id]; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
44 local bookmark = item:get_child("conference", namespace); |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
45 local conference = st.stanza("conference", { |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
46 jid = item.attr.id, |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
47 name = bookmark.attr.name, |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
48 autojoin = bookmark.attr.autojoin, |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
49 }); |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
50 local nick = bookmark:get_child_text("nick"); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
51 if nick ~= nil then |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
52 conference:text_tag("nick", nick):up(); |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
53 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
54 local password = bookmark:get_child_text("password"); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
55 if password ~= nil then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
56 conference:text_tag("password", password):up(); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
57 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
58 storage:add_child(conference); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
59 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
60 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
61 return storage; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
62 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
63 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
64 local function on_retrieve_legacy_pep(event) |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
65 local stanza, session = event.stanza, event.origin; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
66 local pubsub = stanza:get_child("pubsub", "http://jabber.org/protocol/pubsub"); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
67 if pubsub == nil then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
68 return; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
69 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
70 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
71 local items = pubsub:get_child("items"); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
72 if items == nil then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
73 return; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
74 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
75 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
76 local node = items.attr.node; |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
77 if node ~= namespace_legacy then |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
78 return; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
79 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
80 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
81 local username = session.username; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
82 local jid = username.."@"..session.host; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
83 local service = mod_pep.get_pep_service(username); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
84 local ok, ret = service:get_items(namespace, session.full_jid); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
85 if not ok then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
86 if ret == "item-not-found" then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
87 module:log("debug", "Got no PEP bookmarks item for %s, returning empty legacy PEP bookmarks", jid); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
88 session.send(st.reply(stanza):add_child(query)); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
89 else |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
90 module:log("error", "Failed to retrieve PEP bookmarks of %s: %s", jid, ret); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
91 session.send(st.error_reply(stanza, "cancel", ret, "Failed to retrive bookmarks from PEP")); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
92 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
93 return true; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
94 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
95 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
96 local storage = generate_legacy_storage(ret); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
97 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
98 module:log("debug", "Sending back legacy PEP for %s: %s", jid, storage); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
99 session.send(st.reply(stanza) |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
100 :tag("pubsub", {xmlns = "http://jabber.org/protocol/pubsub"}) |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
101 :tag("items", {node = namespace_legacy}) |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
102 :tag("item", {id = "current"}) |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
103 :add_child(storage)); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
104 return true; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
105 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
106 |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
107 local function on_retrieve_private_xml(event) |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
108 local stanza, session = event.stanza, event.origin; |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
109 local query = stanza:get_child("query", namespace_private); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
110 if query == nil then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
111 return; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
112 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
113 |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
114 local bookmarks = query:get_child("storage", namespace_legacy); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
115 if bookmarks == nil then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
116 return; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
117 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
118 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
119 module:log("debug", "Getting private bookmarks: %s", bookmarks); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
120 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
121 local username = session.username; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
122 local jid = username.."@"..session.host; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
123 local service = mod_pep.get_pep_service(username); |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
124 local ok, ret = service:get_items(namespace, session.full_jid); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
125 if not ok then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
126 if ret == "item-not-found" then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
127 module:log("debug", "Got no PEP bookmarks item for %s, returning empty private bookmarks", jid); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
128 session.send(st.reply(stanza):add_child(query)); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
129 else |
3740
b3fb32bd1f01
mod_bookmarks2: Use the correct error when failing to retrieve bookmarks2 to reply to Private XML request.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3739
diff
changeset
|
130 module:log("error", "Failed to retrieve PEP bookmarks of %s: %s", jid, ret); |
b3fb32bd1f01
mod_bookmarks2: Use the correct error when failing to retrieve bookmarks2 to reply to Private XML request.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3739
diff
changeset
|
131 session.send(st.error_reply(stanza, "cancel", ret, "Failed to retrive bookmarks from PEP")); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
132 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
133 return true; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
134 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
135 |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
136 local storage = generate_legacy_storage(ret); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
137 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
138 module:log("debug", "Sending back private for %s: %s", jid, storage); |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
139 session.send(st.reply(stanza):query(namespace_private):add_child(storage)); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
140 return true; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
141 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
142 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
143 local function compare_bookmark2(a, b) |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
144 if a == nil or b == nil then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
145 return false; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
146 end |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
147 local a_conference = a:get_child("conference", namespace); |
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
148 local b_conference = b:get_child("conference", namespace); |
4739 | 149 local a_nick = a_conference:get_child_text("nick"); |
150 local b_nick = b_conference:get_child_text("nick"); | |
151 local a_password = a_conference:get_child_text("password"); | |
152 local b_password = b_conference:get_child_text("password"); | |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
153 return (a.attr.id == b.attr.id and |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
154 a_conference.attr.name == b_conference.attr.name and |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
155 a_conference.attr.autojoin == b_conference.attr.autojoin and |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
156 a_nick == b_nick and |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
157 a_password == b_password); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
158 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
159 |
3739
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
160 local function publish_to_pep(jid, bookmarks, synchronise) |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
161 local service = mod_pep.get_pep_service(jid_split(jid)); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
162 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
163 if #bookmarks.tags == 0 then |
3739
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
164 if synchronise then |
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
165 -- If we set zero legacy bookmarks, purge the bookmarks 2 node. |
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
166 module:log("debug", "No bookmark in the set, purging instead."); |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
167 return service:purge(namespace, jid, true); |
3739
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
168 else |
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
169 return true; |
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
170 end |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
171 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
172 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
173 -- Retrieve the current bookmarks2. |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
174 module:log("debug", "Retrieving the current bookmarks 2."); |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
175 local has_bookmarks2, ret = service:get_items(namespace, jid); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
176 local bookmarks2; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
177 if not has_bookmarks2 and ret == "item-not-found" then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
178 module:log("debug", "Got item-not-found, assuming it was empty until now, creating."); |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
179 local ok, err = service:create(namespace, jid, default_options); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
180 if not ok then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
181 module:log("error", "Creating bookmarks 2 node failed: %s", err); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
182 return ok, err; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
183 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
184 bookmarks2 = {}; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
185 elseif not has_bookmarks2 then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
186 module:log("debug", "Got %s error, aborting.", ret); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
187 return false, ret; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
188 else |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
189 module:log("debug", "Got existing bookmarks2."); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
190 bookmarks2 = ret; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
191 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
192 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
193 -- Get a list of all items we may want to remove. |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
194 local to_remove = {}; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
195 for i in ipairs(bookmarks2) do |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
196 to_remove[bookmarks2[i]] = true; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
197 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
198 |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
199 for bookmark in bookmarks:childtags("conference", namespace_legacy) do |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
200 -- Create the new conference element by copying everything from the legacy one. |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
201 local conference = st.stanza("conference", { |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
202 xmlns = namespace, |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
203 name = bookmark.attr.name, |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
204 autojoin = bookmark.attr.autojoin, |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
205 }); |
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
206 local nick = bookmark:get_child_text("nick"); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
207 if nick ~= nil then |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
208 conference:text_tag("nick", nick):up(); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
209 end |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
210 local password = bookmark:get_child_text("password"); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
211 if password ~= nil then |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
212 conference:text_tag("password", password):up(); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
213 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
214 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
215 -- Create its wrapper. |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
216 local item = st.stanza("item", { xmlns = "http://jabber.org/protocol/pubsub", id = bookmark.attr.jid }) |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
217 :add_child(conference); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
218 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
219 -- Then publish it only if it’s a new one or updating a previous one. |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
220 if compare_bookmark2(item, bookmarks2[bookmark.attr.jid]) then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
221 module:log("debug", "Item %s identical to the previous one, skipping.", item.attr.id); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
222 to_remove[bookmark.attr.jid] = nil; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
223 else |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
224 if bookmarks2[bookmark.attr.jid] == nil then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
225 module:log("debug", "Item %s not existing previously, publishing.", item.attr.id); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
226 else |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
227 module:log("debug", "Item %s different from the previous one, publishing.", item.attr.id); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
228 to_remove[bookmark.attr.jid] = nil; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
229 end |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
230 local ok, err = service:publish(namespace, jid, bookmark.attr.jid, item, default_options); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
231 if not ok then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
232 module:log("error", "Publishing item %s failed: %s", item.attr.id, err); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
233 return ok, err; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
234 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
235 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
236 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
237 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
238 -- Now handle retracting items that have been removed. |
3739
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
239 if synchronise then |
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
240 for id in pairs(to_remove) do |
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
241 module:log("debug", "Item %s removed from bookmarks.", id); |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
242 local ok, err = service:retract(namespace, jid, id, st.stanza("retract", { id = id })); |
3739
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
243 if not ok then |
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
244 module:log("error", "Retracting item %s failed: %s", id, err); |
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
245 return ok, err; |
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
246 end |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
247 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
248 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
249 return true; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
250 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
251 |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
252 -- Synchronise legacy PEP to PEP. |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
253 local function on_publish_legacy_pep(event) |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
254 local stanza, session = event.stanza, event.origin; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
255 local pubsub = stanza:get_child("pubsub", "http://jabber.org/protocol/pubsub"); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
256 if pubsub == nil then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
257 return; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
258 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
259 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
260 local publish = pubsub:get_child("publish"); |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
261 if publish == nil or publish.attr.node ~= namespace_legacy then |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
262 return; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
263 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
264 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
265 local item = publish:get_child("item"); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
266 if item == nil then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
267 return; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
268 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
269 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
270 -- Here we ignore the item id, it’ll be generated as 'current' anyway. |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
271 |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
272 local bookmarks = item:get_child("storage", namespace_legacy); |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
273 if bookmarks == nil then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
274 return; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
275 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
276 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
277 -- We also ignore the publish-options. |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
278 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
279 module:log("debug", "Legacy PEP bookmarks set by client, publishing to PEP."); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
280 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
281 local ok, err = publish_to_pep(session.full_jid, bookmarks, true); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
282 if not ok then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
283 module:log("error", "Failed to publish to PEP bookmarks for %s@%s: %s", session.username, session.host, err); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
284 session.send(st.error_reply(stanza, "cancel", "internal-server-error", "Failed to store bookmarks to PEP")); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
285 return true; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
286 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
287 |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
288 session.send(st.reply(stanza)); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
289 return true; |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
290 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
291 |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
292 -- Synchronise Private XML to PEP. |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
293 local function on_publish_private_xml(event) |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
294 local stanza, session = event.stanza, event.origin; |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
295 local query = stanza:get_child("query", namespace_private); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
296 if query == nil then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
297 return; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
298 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
299 |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
300 local bookmarks = query:get_child("storage", namespace_legacy); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
301 if bookmarks == nil then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
302 return; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
303 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
304 |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
305 module:log("debug", "Private bookmarks set by client, publishing to PEP."); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
306 |
3739
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
307 local ok, err = publish_to_pep(session.full_jid, bookmarks, true); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
308 if not ok then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
309 module:log("error", "Failed to publish to PEP bookmarks for %s@%s: %s", session.username, session.host, err); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
310 session.send(st.error_reply(stanza, "cancel", "internal-server-error", "Failed to store bookmarks to PEP")); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
311 return true; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
312 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
313 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
314 session.send(st.reply(stanza)); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
315 return true; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
316 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
317 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
318 local function migrate_legacy_bookmarks(event) |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
319 local session = event.session; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
320 local username = session.username; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
321 local service = mod_pep.get_pep_service(username); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
322 local jid = username.."@"..session.host; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
323 |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
324 local ok, ret = service:get_items(namespace_legacy, session.full_jid); |
3741
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
325 if ok then |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
326 module:log("debug", "Legacy PEP bookmarks found for %s, migrating.", jid); |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
327 local failed = false; |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
328 for _, item_id in ipairs(ret) do |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
329 local item = ret[item_id]; |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
330 if item.attr.id ~= "current" then |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
331 module:log("warn", "Legacy PEP bookmarks for %s isn’t using 'current' as its id: %s", jid, item.attr.id); |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
332 end |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
333 local bookmarks = item:get_child("storage", namespace_legacy); |
3741
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
334 module:log("debug", "Got legacy PEP bookmarks of %s: %s", jid, bookmarks); |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
335 |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
336 local ok, err = publish_to_pep(session.full_jid, bookmarks, false); |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
337 if not ok then |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
338 module:log("error", "Failed to store legacy PEP bookmarks to bookmarks 2 for %s, aborting migration: %s", jid, err); |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
339 failed = true; |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
340 break; |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
341 end |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
342 end |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
343 if not failed then |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
344 module:log("debug", "Successfully migrated legacy PEP bookmarks of %s to bookmarks 2, attempting deletion of the node.", jid); |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
345 local ok, err = service:delete(namespace_legacy, jid); |
3741
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
346 if not ok then |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
347 module:log("error", "Failed to delete legacy PEP bookmarks for %s: %s", jid, err); |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
348 end |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
349 end |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
350 end |
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
351 |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
352 local data, err = private_storage:get(username, "storage:storage:bookmarks"); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
353 if not data then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
354 module:log("debug", "No existing legacy bookmarks for %s, migration already done: %s", jid, err); |
4639
3da7cd77aca9
mod_bookmarks2: Factor namespace string into a variable
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4279
diff
changeset
|
355 local ok, ret2 = service:get_items(namespace, session.full_jid); |
4279
776eacd233b5
mod_bookmarks2: Fix luacheck warning
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3743
diff
changeset
|
356 if not ok or not ret2 then |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
357 module:log("debug", "Additionally, no bookmarks 2 were existing for %s, assuming empty.", jid); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
358 module:fire_event("bookmarks/empty", { session = session }); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
359 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
360 return; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
361 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
362 local bookmarks = st.deserialize(data); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
363 module:log("debug", "Got legacy bookmarks of %s: %s", jid, bookmarks); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
364 |
3741
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
365 module:log("debug", "Going to store legacy bookmarks to bookmarks 2 %s.", jid); |
3739
1ed3d86eeaed
mod_bookmarks2: Don’t purge or remove inexistant items when synchronising existing Private XML data.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3738
diff
changeset
|
366 local ok, err = publish_to_pep(session.full_jid, bookmarks, false); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
367 if not ok then |
3741
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
368 module:log("error", "Failed to store legacy bookmarks to bookmarks 2 for %s, aborting migration: %s", jid, err); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
369 return; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
370 end |
3741
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
371 module:log("debug", "Stored legacy bookmarks to bookmarks 2 for %s.", jid); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
372 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
373 local ok, err = private_storage:set(username, "storage:storage:bookmarks", nil); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
374 if not ok then |
3741
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
375 module:log("error", "Failed to remove legacy bookmarks of %s: %s", jid, err); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
376 return; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
377 end |
3741
33b3e2387a10
mod_bookmarks2: Also migrate legacy PEP bookmarks (current XEP-0048).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3740
diff
changeset
|
378 module:log("debug", "Removed legacy bookmarks of %s, migration done!", jid); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
379 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
380 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
381 local function on_node_created(event) |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
382 local service, node, actor = event.service, event.node, event.actor; |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
383 if node ~= namespace_legacy then |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
384 return; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
385 end |
3743
5eab799b5fa4
mod_bookmarks2: Delete legacy PEP bookmarks whenever they get recreated, to prevent them from being used.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3742
diff
changeset
|
386 |
5eab799b5fa4
mod_bookmarks2: Delete legacy PEP bookmarks whenever they get recreated, to prevent them from being used.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3742
diff
changeset
|
387 module:log("debug", "Something tried to create legacy PEP bookmarks for %s.", actor); |
4837
1f1acb7f3c10
mod_bookmarks2: Use constants for namespaces
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4835
diff
changeset
|
388 local ok, err = service:delete(namespace_legacy, actor); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
389 if not ok then |
3743
5eab799b5fa4
mod_bookmarks2: Delete legacy PEP bookmarks whenever they get recreated, to prevent them from being used.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3742
diff
changeset
|
390 module:log("error", "Failed to delete legacy PEP bookmarks for %s: %s", actor, err); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
391 end |
3743
5eab799b5fa4
mod_bookmarks2: Delete legacy PEP bookmarks whenever they get recreated, to prevent them from being used.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3742
diff
changeset
|
392 module:log("debug", "Legacy PEP bookmarks node of %s deleted.", actor); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
393 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
394 |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
395 module:hook("iq/bare/jabber:iq:private:query", function (event) |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
396 if event.stanza.attr.type == "get" then |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
397 return on_retrieve_private_xml(event); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
398 else |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
399 return on_publish_private_xml(event); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
400 end |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
401 end, 1); |
4834
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
402 module:hook("iq/bare/http://jabber.org/protocol/pubsub:pubsub", function (event) |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
403 if event.stanza.attr.type == "get" then |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
404 return on_retrieve_legacy_pep(event); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
405 else |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
406 return on_publish_legacy_pep(event); |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
407 end |
7ed2467c9bb5
mod_bookmarks2: Add simple support for legacy PEP queries
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
4739
diff
changeset
|
408 end, 1); |
3677
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
409 module:hook("resource-bind", migrate_legacy_bookmarks); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
410 module:handle_items("pep-service", function (event) |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
411 local service = event.item.service; |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
412 module:hook_object_event(service.events, "node-created", on_node_created); |
90f88a643973
mod_bookmarks2: Add new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
413 end, function () end, true); |