Mercurial > prosody-modules
annotate mod_bookmarks/mod_bookmarks.lua @ 3656:3e0f4d727825
mod_vcard_muc: Add an alternative method of signaling avatar change
When the avatar has been changed, a signal is sent that the room
configuration has changed. Clients then do a disco#info query to find
the SHA-1 of the new avatar. They can then fetch it as before, or not if
they have it cached already.
This is meant to be less disruptive than signaling via presence, which
caused problems for some clients.
If clients transition to the new method, the old one can eventually be removed.
The namespace is made up while waiting for standardization.
Otherwise it is very close to what's described in
https://xmpp.org/extensions/inbox/muc-avatars.html
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 25 Aug 2019 20:46:43 +0200 |
parents | 7893115bf382 |
children | 7575399ae544 |
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); |