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
parents 1f1acb7f3c10
children 797b51043767
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
fdd9e5d89d73 mod_bookmarks2: Fix comparison
Kim Alvefur <zash@zash.se>
parents: 4738
diff changeset
149 local a_nick = a_conference:get_child_text("nick");
fdd9e5d89d73 mod_bookmarks2: Fix comparison
Kim Alvefur <zash@zash.se>
parents: 4738
diff changeset
150 local b_nick = b_conference:get_child_text("nick");
fdd9e5d89d73 mod_bookmarks2: Fix comparison
Kim Alvefur <zash@zash.se>
parents: 4738
diff changeset
151 local a_password = a_conference:get_child_text("password");
fdd9e5d89d73 mod_bookmarks2: Fix comparison
Kim Alvefur <zash@zash.se>
parents: 4738
diff changeset
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);