Mercurial > prosody-modules
annotate mod_group_bookmarks/mod_group_bookmarks.lua @ 3261:c2b1f64aaf97
mod_group_bookmarks: Return early when the key is not bookmarks.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Fri, 24 Aug 2018 19:38:17 +0200 |
parents | 9bb317400c4c |
children | 0ccdd3f31435 |
rev | line source |
---|---|
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
679
diff
changeset
|
4 -- |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local st = require "util.stanza" |
3259
6824a1f3d8c0
mod_group_bookmarks: Remove duplicated requires.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
11 local dm_load = require "util.datamanager".load |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
3259
6824a1f3d8c0
mod_group_bookmarks: Remove duplicated requires.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
13 local jid = require "util.jid"; |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local jid_bare, jid_prep, jid_split = jid.bare, jid.prep, jid.split; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 local module_host = module:get_host(); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 local rooms; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 local members; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 local bookmarks_file; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 module:add_feature("jabber:iq:private"); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 function inject_bookmarks(username, host, data) |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 local jid = username.."@"..host; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 data:reset(); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 if members[jid] then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 for _, room in ipairs(members[jid]) do |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 data:tag("conference", { |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 name = room; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 jid = room; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 autojoin = "1"; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 }); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 local nick = rooms[room][jid]; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 if nick then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 data:tag("nick"):text(nick):up(); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 data:up(); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 return data; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 |
3260
9bb317400c4c
mod_group_bookmarks: Use iq-get event instead of checking for stanza.attr.type == "get".
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3259
diff
changeset
|
45 module:hook("iq-get/self/jabber:iq:private:query", function(event) |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 local origin, stanza = event.origin, event.stanza; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 local query = stanza.tags[1]; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 if #query.tags == 1 then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 local tag = query.tags[1]; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 local key = tag.name..":"..tag.attr.xmlns; |
3261
c2b1f64aaf97
mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3260
diff
changeset
|
51 if key ~= "storage:storage:bookmarks" then |
c2b1f64aaf97
mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3260
diff
changeset
|
52 return; |
c2b1f64aaf97
mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3260
diff
changeset
|
53 end |
3259
6824a1f3d8c0
mod_group_bookmarks: Remove duplicated requires.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
54 local data, err = dm_load(origin.username, origin.host, "private"); |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 if err then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 return true; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 end |
3260
9bb317400c4c
mod_group_bookmarks: Use iq-get event instead of checking for stanza.attr.type == "get".
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3259
diff
changeset
|
59 local data = data and data[key]; |
3261
c2b1f64aaf97
mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3260
diff
changeset
|
60 if not data then |
3260
9bb317400c4c
mod_group_bookmarks: Use iq-get event instead of checking for stanza.attr.type == "get".
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3259
diff
changeset
|
61 data = st.stanza("storage", { xmlns = "storage:bookmarks" }); |
9bb317400c4c
mod_group_bookmarks: Use iq-get event instead of checking for stanza.attr.type == "get".
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3259
diff
changeset
|
62 end |
3261
c2b1f64aaf97
mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3260
diff
changeset
|
63 data = st.deserialize(data); |
c2b1f64aaf97
mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3260
diff
changeset
|
64 data = inject_bookmarks(origin.username, origin.host, data); |
c2b1f64aaf97
mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3260
diff
changeset
|
65 origin.send(st.reply(stanza):tag("query", {xmlns = "jabber:iq:private"}) |
c2b1f64aaf97
mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3260
diff
changeset
|
66 :add_child(data)); |
3260
9bb317400c4c
mod_group_bookmarks: Use iq-get event instead of checking for stanza.attr.type == "get".
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3259
diff
changeset
|
67 return true; |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 end, 1); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 function module.load() |
679
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
72 bookmarks_file = module:get_option_string("group_bookmarks_file"); |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
73 |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 rooms = { default = {} }; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 members = { }; |
679
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
76 |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
77 if not bookmarks_file then |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
78 module:log("error", "Please specify group_bookmarks_file in your configuration"); |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
79 return; |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
80 end |
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
679
diff
changeset
|
81 |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 local curr_room; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 for line in io.lines(bookmarks_file) do |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 if line:match("^%s*%[.-%]%s*$") then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 curr_room = line:match("^%s*%[(.-)%]%s*$"); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 if curr_room:match("^%+") then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 curr_room = curr_room:gsub("^%+", ""); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 if not members[false] then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 members[false] = {}; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 members[false][#members[false]+1] = curr_room; -- Is a public group |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 module:log("debug", "New group: %s", tostring(curr_room)); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 rooms[curr_room] = rooms[curr_room] or {}; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 elseif curr_room then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 -- Add JID |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 local entryjid, name = line:match("([^=]*)=?(.*)"); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 module:log("debug", "entryjid = '%s', name = '%s'", entryjid, name); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 local jid; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 jid = jid_prep(entryjid:match("%S+")); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 if jid then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 module:log("debug", "New member of %s: %s", tostring(curr_room), tostring(jid)); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 rooms[curr_room][jid] = name or false; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 members[jid] = members[jid] or {}; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 members[jid][#members[jid]+1] = curr_room; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 module:log("info", "Group bookmarks loaded successfully"); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
111 |