annotate mod_group_bookmarks/mod_group_bookmarks.lua @ 2494:d300ae5dba87

mod_smacks: Fix some bugs with smacks-ack-delayed event triggering. The old code had several flaws which are addressed here. First of all this fixes the if statement guarding the event generation There where some timing glitches addressed by this commit as well.
author tmolitor <thilo@eightysoft.de>
date Sun, 12 Feb 2017 21:23:22 +0100
parents 7dbde05b48a9
children 6824a1f3d8c0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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"
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 local datamanager = require "util.datamanager"
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 local jid, datamanager = require "util.jid", require "util.datamanager";
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
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 module:hook("iq/self/jabber:iq:private:query", function(event)
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 type = stanza.attr.type;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 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
49 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
50 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
51 local key = tag.name..":"..tag.attr.xmlns;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 local data, err = datamanager.load(origin.username, origin.host, "private");
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 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
54 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
55 return true;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 if stanza.attr.type == "get" then
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 local data = data and data[key];
290
ee416b285802 mod_group_bookmarks: Always ensure bookmarks are injected, even if the user has no bookmarks already stored
Matthew Wild <mwild1@gmail.com>
parents: 289
diff changeset
59 if (not data) and key == "storage:storage:bookmarks" then
ee416b285802 mod_group_bookmarks: Always ensure bookmarks are injected, even if the user has no bookmarks already stored
Matthew Wild <mwild1@gmail.com>
parents: 289
diff changeset
60 data = st.stanza("storage", { xmlns = "storage:bookmarks" });
ee416b285802 mod_group_bookmarks: Always ensure bookmarks are injected, even if the user has no bookmarks already stored
Matthew Wild <mwild1@gmail.com>
parents: 289
diff changeset
61 end
289
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 if data then
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 data = st.deserialize(data);
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 if key == "storage:storage:bookmarks" then
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 data = inject_bookmarks(origin.username, origin.host, data);
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 origin.send(st.reply(stanza):tag("query", {xmlns = "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
68 :add_child(data));
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 else
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 origin.send(st.reply(stanza):add_child(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
71 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 return true;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 end, 1);
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 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
78 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
79
289
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 rooms = { default = {} };
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 members = { };
679
dcddd9195098 mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents: 290
diff changeset
82
dcddd9195098 mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents: 290
diff changeset
83 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
84 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
85 return;
dcddd9195098 mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents: 290
diff changeset
86 end
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 679
diff changeset
87
289
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 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
89 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
90 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
91 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
92 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
93 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
94 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
95 members[false] = {};
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 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
98 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 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
100 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
101 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
102 -- Add JID
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 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
104 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
105 local jid;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 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
107 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
108 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
109 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
110 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
111 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
112 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 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
116 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117