Software /
code /
prosody-modules
Annotate
mod_default_bookmarks/mod_default_bookmarks.lua @ 4857:3f6711c1c66a
mod_default_bookmarks: Use whichever of mod_bookmarks and mod_bookmarks2 is enabled
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 08 Jan 2022 00:05:45 +0100 |
parent | 4856:b3f0f82af5a2 |
child | 4858:727f147aac4d |
rev | line source |
---|---|
479
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- Prosody IM |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 -- Copyright (C) 2011 Kim Alvefur |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
5 -- Copyright (C) 2018 Emmanuel Gil Peyrot |
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
1325
diff
changeset
|
6 -- |
479
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 -- This project is MIT/X11 licensed. Please see the |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 -- COPYING file in the source package for more information. |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 -- |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 local st = require "util.stanza" |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local dm_load = require "util.datamanager".load |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 local jid_split = require "util.jid".split |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
15 -- COMPAT w/trunk |
4857
3f6711c1c66a
mod_default_bookmarks: Use whichever of mod_bookmarks and mod_bookmarks2 is enabled
Kim Alvefur <zash@zash.se>
parents:
4856
diff
changeset
|
16 local mod_bookmarks_available = false; |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
17 local mm = require "core.modulemanager"; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
18 if mm.get_modules_for_host then |
4857
3f6711c1c66a
mod_default_bookmarks: Use whichever of mod_bookmarks and mod_bookmarks2 is enabled
Kim Alvefur <zash@zash.se>
parents:
4856
diff
changeset
|
19 local host_modules = mm.get_modules_for_host(module.host); |
3f6711c1c66a
mod_default_bookmarks: Use whichever of mod_bookmarks and mod_bookmarks2 is enabled
Kim Alvefur <zash@zash.se>
parents:
4856
diff
changeset
|
20 if host_modules:contains("bookmarks") then |
3f6711c1c66a
mod_default_bookmarks: Use whichever of mod_bookmarks and mod_bookmarks2 is enabled
Kim Alvefur <zash@zash.se>
parents:
4856
diff
changeset
|
21 mod_bookmarks_available = "bookmarks"; |
3f6711c1c66a
mod_default_bookmarks: Use whichever of mod_bookmarks and mod_bookmarks2 is enabled
Kim Alvefur <zash@zash.se>
parents:
4856
diff
changeset
|
22 elseif host_modules:contains("bookmarks2") then |
3f6711c1c66a
mod_default_bookmarks: Use whichever of mod_bookmarks and mod_bookmarks2 is enabled
Kim Alvefur <zash@zash.se>
parents:
4856
diff
changeset
|
23 mod_bookmarks_available = "bookmarks2"; |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
24 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
25 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
26 |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
27 local function get_default_bookmarks(nickname) |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
28 local bookmarks = module:get_option("default_bookmarks"); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
29 if not bookmarks or #bookmarks == 0 then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
30 return false; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
31 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
32 local reply = st.stanza("storage", { xmlns = "storage:bookmarks" }); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
33 local nick = nickname and st.stanza("nick"):text(nickname); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
34 for _, bookmark in ipairs(bookmarks) do |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
35 if type(bookmark) ~= "table" then -- assume it's only a jid |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
36 bookmark = { jid = bookmark, name = jid_split(bookmark) }; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
37 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
38 reply:tag("conference", { |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
39 jid = bookmark.jid, |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
40 name = bookmark.name, |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
41 autojoin = "1", |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
42 }); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
43 if nick then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
44 reply:add_child(nick):up(); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
45 end |
3237
420ebea00cf3
mod_default_bookmarks: Add support for <password/>.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3236
diff
changeset
|
46 if bookmark.password then |
420ebea00cf3
mod_default_bookmarks: Add support for <password/>.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3236
diff
changeset
|
47 reply:tag("password"):text(bookmark.password):up(); |
420ebea00cf3
mod_default_bookmarks: Add support for <password/>.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3236
diff
changeset
|
48 end |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
49 reply:up(); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
50 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
51 return reply; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
52 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
53 |
4857
3f6711c1c66a
mod_default_bookmarks: Use whichever of mod_bookmarks and mod_bookmarks2 is enabled
Kim Alvefur <zash@zash.se>
parents:
4856
diff
changeset
|
54 if mod_bookmarks_available then |
3f6711c1c66a
mod_default_bookmarks: Use whichever of mod_bookmarks and mod_bookmarks2 is enabled
Kim Alvefur <zash@zash.se>
parents:
4856
diff
changeset
|
55 local mod_bookmarks = module:depends(mod_bookmarks_available); |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
56 local function on_bookmarks_empty(event) |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
57 local session = event.session; |
4856
b3f0f82af5a2
mod_default_bookmarks: Fix mod_bookmarks capability check
Kim Alvefur <zash@zash.se>
parents:
4854
diff
changeset
|
58 if mod_bookmarks.publish_to_pep then |
b3f0f82af5a2
mod_default_bookmarks: Fix mod_bookmarks capability check
Kim Alvefur <zash@zash.se>
parents:
4854
diff
changeset
|
59 local bookmarks = get_default_bookmarks(session.username); |
b3f0f82af5a2
mod_default_bookmarks: Fix mod_bookmarks capability check
Kim Alvefur <zash@zash.se>
parents:
4854
diff
changeset
|
60 if bookmarks then |
b3f0f82af5a2
mod_default_bookmarks: Fix mod_bookmarks capability check
Kim Alvefur <zash@zash.se>
parents:
4854
diff
changeset
|
61 mod_bookmarks.publish_to_pep(session.full_jid, bookmarks); |
b3f0f82af5a2
mod_default_bookmarks: Fix mod_bookmarks capability check
Kim Alvefur <zash@zash.se>
parents:
4854
diff
changeset
|
62 end |
4854
ee2463fbf794
mod_default_bookmarks: Abort on incompatible mod_bookmarks
Kim Alvefur <zash@zash.se>
parents:
3237
diff
changeset
|
63 else |
ee2463fbf794
mod_default_bookmarks: Abort on incompatible mod_bookmarks
Kim Alvefur <zash@zash.se>
parents:
3237
diff
changeset
|
64 module:log("error", "Method for publishing legacy bookmarks not exposed by mod_bookmarks") |
479
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 end |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 end |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
67 module:hook("bookmarks/empty", on_bookmarks_empty); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
68 else |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
69 local function on_private_xml_get(event) |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
70 local origin, stanza = event.origin, event.stanza; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
71 local tag = stanza.tags[1].tags[1]; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
72 local key = tag.name..":"..tag.attr.xmlns; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
73 if key ~= "storage:storage:bookmarks" then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
74 return; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
75 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
76 |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
77 local data, err = dm_load(origin.username, origin.host, "private"); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
78 if data and data[key] then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
79 return; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
80 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
81 |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
82 local bookmarks = get_default_bookmarks(origin.username); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
83 if not bookmarks then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
84 return; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
85 end; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
86 |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
87 local reply = st.reply(stanza):tag("query", { xmlns = "jabber:iq:private" }) |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
88 :add_child(bookmarks); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
89 origin.send(reply); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
90 return true; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
91 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
92 module:hook("iq-get/self/jabber:iq:private:query", on_private_xml_get, 1); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
93 end |