annotate mod_bookmarks/mod_bookmarks.lua @ 3640:b2f32b3c6ec1

mod_smacks: fix bug in bad client handling introduced by last commit Use absolute h-values instead of queue-count to determine if a new request should be sent out or if we are looping instead.
author tmolitor <thilo@eightysoft.de>
date Fri, 02 Aug 2019 18:26:06 +0200
parents 7893115bf382
children 7575399ae544
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3238
786ba175f2e5 mod_bookmarks: Require forgotten util.jid module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3235
diff changeset
1 local st = require "util.stanza";
786ba175f2e5 mod_bookmarks: Require forgotten util.jid module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3235
diff changeset
2 local jid_split = require "util.jid".split;
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
3
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
4 local mod_pep = module:depends "pep";
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
5 local private_storage = module:open_store("private", "map");
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
6
3294
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
7 local default_options = {
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
8 ["persist_items"] = true;
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
9 ["access_model"] = "whitelist";
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
10 };
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
11
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
12 module:hook("account-disco-info", function (event)
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
13 event.reply:tag("feature", { var = "urn:xmpp:bookmarks-conversion:0" }):up();
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
14 end);
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
15
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
16 local function on_retrieve_private_xml(event)
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
17 local stanza, session = event.stanza, event.origin;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
18 local query = stanza:get_child("query", "jabber:iq:private");
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
19 if query == nil then
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
20 return;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
21 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
22
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
23 local bookmarks = query:get_child("storage", "storage:bookmarks");
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
24 if bookmarks == nil then
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
25 return;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
26 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
27
3230
ba0d444b64aa mod_bookmarks: Simplify last item retrieval thanks to Prosody b6ffd4f951b9.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3229
diff changeset
28 module:log("debug", "Getting private bookmarks: %s", bookmarks);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
29
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
30 local username = session.username;
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
31 local jid = username.."@"..session.host;
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
32 local service = mod_pep.get_pep_service(username);
3230
ba0d444b64aa mod_bookmarks: Simplify last item retrieval thanks to Prosody b6ffd4f951b9.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3229
diff changeset
33 local ok, id, item = service:get_last_item("storage:bookmarks", session.full_jid);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
34 if not ok then
3543
11629f04ddd0 mod_bookmarks: Check for item-not-found and return empty Private XML. Fixes #1265 (thanks gerald and thebigfrog!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3487
diff changeset
35 if id == "item-not-found" then
11629f04ddd0 mod_bookmarks: Check for item-not-found and return empty Private XML. Fixes #1265 (thanks gerald and thebigfrog!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3487
diff changeset
36 module:log("debug", "Got no PEP bookmarks item for %s, returning empty private bookmarks", jid);
11629f04ddd0 mod_bookmarks: Check for item-not-found and return empty Private XML. Fixes #1265 (thanks gerald and thebigfrog!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3487
diff changeset
37 session.send(st.reply(stanza):add_child(query));
11629f04ddd0 mod_bookmarks: Check for item-not-found and return empty Private XML. Fixes #1265 (thanks gerald and thebigfrog!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3487
diff changeset
38 else
11629f04ddd0 mod_bookmarks: Check for item-not-found and return empty Private XML. Fixes #1265 (thanks gerald and thebigfrog!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3487
diff changeset
39 module:log("error", "Failed to retrieve PEP bookmarks of %s: %s", jid, id);
11629f04ddd0 mod_bookmarks: Check for item-not-found and return empty Private XML. Fixes #1265 (thanks gerald and thebigfrog!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3487
diff changeset
40 session.send(st.error_reply(stanza, "cancel", "internal-server-error", "Failed to retrive bookmarks from PEP"));
11629f04ddd0 mod_bookmarks: Check for item-not-found and return empty Private XML. Fixes #1265 (thanks gerald and thebigfrog!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3487
diff changeset
41 end
3544
7893115bf382 mod_bookmarks: Return true when a stanza has been sent.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3543
diff changeset
42 return true;
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
43 end
3233
176b537a658c mod_bookmarks: Send back empty Private XML bookmarks on empty PEP bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3232
diff changeset
44 if not id or not item then
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
45 module:log("debug", "Got no PEP bookmarks item for %s, returning empty private bookmarks", jid);
3233
176b537a658c mod_bookmarks: Send back empty Private XML bookmarks on empty PEP bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3232
diff changeset
46 session.send(st.reply(stanza):add_child(query));
3544
7893115bf382 mod_bookmarks: Return true when a stanza has been sent.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3543
diff changeset
47 return true;
3233
176b537a658c mod_bookmarks: Send back empty Private XML bookmarks on empty PEP bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3232
diff changeset
48 end
176b537a658c mod_bookmarks: Send back empty Private XML bookmarks on empty PEP bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3232
diff changeset
49 module:log("debug", "Got item %s: %s", id, item);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
50
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
51 local content = item.tags[1];
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
52 module:log("debug", "Sending back private for %s: %s", jid, content);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
53 session.send(st.reply(stanza):query("jabber:iq:private"):add_child(content));
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
54 return true;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
55 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
56
3235
bd8e94ff726b mod_bookmarks: Expose publish_to_pep() to other modules.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3234
diff changeset
57 function publish_to_pep(jid, bookmarks)
bd8e94ff726b mod_bookmarks: Expose publish_to_pep() to other modules.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3234
diff changeset
58 local service = mod_pep.get_pep_service(jid_split(jid));
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
59 local item = st.stanza("item", { xmlns = "http://jabber.org/protocol/pubsub", id = "current" })
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
60 :add_child(bookmarks);
3294
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
61 return service:publish("storage:bookmarks", jid, "current", item, default_options);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
62 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
63
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
64 -- Synchronise Private XML to PEP.
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
65 local function on_publish_private_xml(event)
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
66 local stanza, session = event.stanza, event.origin;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
67 local query = stanza:get_child("query", "jabber:iq:private");
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
68 if query == nil then
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
69 return;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
70 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
71
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
72 local bookmarks = query:get_child("storage", "storage:bookmarks");
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
73 if bookmarks == nil then
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
74 return;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
75 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
76
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
77 module:log("debug", "Private bookmarks set by client, publishing to pep");
3235
bd8e94ff726b mod_bookmarks: Expose publish_to_pep() to other modules.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3234
diff changeset
78 local ok, err = publish_to_pep(session.full_jid, bookmarks);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
79 if not ok then
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
80 module:log("error", "Failed to publish to PEP bookmarks for %s@%s: %s", session.username, session.host, err);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
81 session.send(st.error_reply(stanza, "cancel", "internal-server-error", "Failed to store bookmarks to PEP"));
3544
7893115bf382 mod_bookmarks: Return true when a stanza has been sent.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3543
diff changeset
82 return true;
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
83 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
84
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
85 session.send(st.reply(stanza));
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
86 return true;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
87 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
88
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
89 local function on_resource_bind(event)
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
90 local session = event.session;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
91 local username = session.username;
3290
87769f53fdc8 mod_bookmarks: Delete the node before attempting migration, to make sure its config is correct.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3282
diff changeset
92 local service = mod_pep.get_pep_service(username);
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
93 local jid = username.."@"..session.host;
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
94
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
95 local data, err = private_storage:get(username, "storage:storage:bookmarks");
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
96 if not data then
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
97 module:log("debug", "No existing Private XML bookmarks for %s, migration already done: %s", jid, err);
3234
b1e25943a004 mod_bookmarks: Fire empty and updated events, for other modules to use.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3233
diff changeset
98 local ok, id = service:get_last_item("storage:bookmarks", session.full_jid);
b1e25943a004 mod_bookmarks: Fire empty and updated events, for other modules to use.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3233
diff changeset
99 if not ok or not id then
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
100 module:log("debug", "Additionally, no PEP bookmarks were existing for %s", jid);
3234
b1e25943a004 mod_bookmarks: Fire empty and updated events, for other modules to use.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3233
diff changeset
101 module:fire_event("bookmarks/empty", { session = session });
b1e25943a004 mod_bookmarks: Fire empty and updated events, for other modules to use.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3233
diff changeset
102 end
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
103 return;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
104 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
105 local bookmarks = st.deserialize(data);
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
106 module:log("debug", "Got private bookmarks of %s: %s", jid, bookmarks);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
107
3290
87769f53fdc8 mod_bookmarks: Delete the node before attempting migration, to make sure its config is correct.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3282
diff changeset
108 -- We don’t care if deleting succeeds or not, we only want to start with a non-existent node.
87769f53fdc8 mod_bookmarks: Delete the node before attempting migration, to make sure its config is correct.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3282
diff changeset
109 module:log("debug", "Deleting possibly existing PEP item for %s", jid);
87769f53fdc8 mod_bookmarks: Delete the node before attempting migration, to make sure its config is correct.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3282
diff changeset
110 service:delete("storage:bookmarks", jid);
87769f53fdc8 mod_bookmarks: Delete the node before attempting migration, to make sure its config is correct.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3282
diff changeset
111
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
112 module:log("debug", "Going to store PEP item for %s", jid);
3235
bd8e94ff726b mod_bookmarks: Expose publish_to_pep() to other modules.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3234
diff changeset
113 local ok, err = publish_to_pep(session.full_jid, bookmarks);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
114 if not ok then
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
115 module:log("error", "Failed to store bookmarks to PEP for %s, aborting migration: %s", jid, err);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
116 return;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
117 end
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
118 module:log("debug", "Stored bookmarks to PEP for %s", jid);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
119
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
120 local ok, err = private_storage:set(username, "storage:storage:bookmarks", nil);
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
121 if not ok then
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
122 module:log("error", "Failed to remove private bookmarks of %s: %s", jid, err);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
123 return;
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
124 end
3282
9346ed926842 mod_bookmarks: Display the bare JID instead of the username in logs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3253
diff changeset
125 module:log("debug", "Removed private bookmarks of %s, migration done!", jid);
3229
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
126 end
e8963e328b26 mod_bookmarks: New module synchronising bookmarks to the new persistent mod_pep
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
127
3294
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
128 local function on_node_created(event)
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
129 local service, node, actor = event.service, event.node, event.actor;
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
130 if node ~= "storage:bookmarks" then
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
131 return;
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
132 end
3487
e60933722248 mod_bookmarks: Use correct variable, fixes a traceback (thanks dan)
Kim Alvefur <zash@zash.se>
parents: 3476
diff changeset
133 local ok, node_config = service:get_node_config(node, actor);
3476
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
134 if not ok then
3487
e60933722248 mod_bookmarks: Use correct variable, fixes a traceback (thanks dan)
Kim Alvefur <zash@zash.se>
parents: 3476
diff changeset
135 module:log("error", "Failed to get node config of %s: %s", node, node_config);
3476
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
136 return;
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
137 end
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
138 local changed = false;
3294
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
139 for config_field, value in pairs(default_options) do
3476
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
140 if node_config[config_field] ~= value then
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
141 node_config[config_field] = value;
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
142 changed = true;
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
143 end
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
144 end
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
145 if not changed then
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
146 return;
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
147 end
3487
e60933722248 mod_bookmarks: Use correct variable, fixes a traceback (thanks dan)
Kim Alvefur <zash@zash.se>
parents: 3476
diff changeset
148 local ok, err = service:set_node_config(node, actor, node_config);
3476
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
149 if not ok then
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
150 module:log("error", "Failed to set node config of %s: %s", node, err);
4ce945490a24 mod_bookmarks: Actually save node config
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3473
diff changeset
151 return;
3294
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
152 end
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
153 end
947790ec4406 mod_bookmarks: Ensure the configuration is correct even with create-on-subscribe.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3290
diff changeset
154
3308
7155cc1adf8f mod_bookmarks: Handle iq:private queries before mod_private
Kim Alvefur <zash@zash.se>
parents: 3307
diff changeset
155 module:hook("iq/bare/jabber:iq:private:query", function (event)
7155cc1adf8f mod_bookmarks: Handle iq:private queries before mod_private
Kim Alvefur <zash@zash.se>
parents: 3307
diff changeset
156 if event.stanza.attr.type == "get" then
7155cc1adf8f mod_bookmarks: Handle iq:private queries before mod_private
Kim Alvefur <zash@zash.se>
parents: 3307
diff changeset
157 return on_retrieve_private_xml(event);
7155cc1adf8f mod_bookmarks: Handle iq:private queries before mod_private
Kim Alvefur <zash@zash.se>
parents: 3307
diff changeset
158 else
7155cc1adf8f mod_bookmarks: Handle iq:private queries before mod_private
Kim Alvefur <zash@zash.se>
parents: 3307
diff changeset
159 return on_publish_private_xml(event);
7155cc1adf8f mod_bookmarks: Handle iq:private queries before mod_private
Kim Alvefur <zash@zash.se>
parents: 3307
diff changeset
160 end
7155cc1adf8f mod_bookmarks: Handle iq:private queries before mod_private
Kim Alvefur <zash@zash.se>
parents: 3307
diff changeset
161 end, 1);
3234
b1e25943a004 mod_bookmarks: Fire empty and updated events, for other modules to use.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3233
diff changeset
162 module:hook("resource-bind", on_resource_bind);
3307
303b17ec8264 mod_bookmarks: Correctly hook events on PEP services
Kim Alvefur <zash@zash.se>
parents: 3294
diff changeset
163 module:handle_items("pep-service", function (event)
303b17ec8264 mod_bookmarks: Correctly hook events on PEP services
Kim Alvefur <zash@zash.se>
parents: 3294
diff changeset
164 local service = event.item.service;
303b17ec8264 mod_bookmarks: Correctly hook events on PEP services
Kim Alvefur <zash@zash.se>
parents: 3294
diff changeset
165 module:hook_object_event(service.events, "node-created", on_node_created);
303b17ec8264 mod_bookmarks: Correctly hook events on PEP services
Kim Alvefur <zash@zash.se>
parents: 3294
diff changeset
166 end, function () end, true);