annotate mod_group_bookmarks/mod_group_bookmarks.lua @ 3263:a65f4297264b

mod_pubsub_github: Unpack request from event
author Kim Alvefur <zash@zash.se>
date Fri, 24 Aug 2018 17:46:47 +0200
parents 0ccdd3f31435
children ebd78514bbec
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
3262
0ccdd3f31435 mod_group_bookmarks: Add my copyright.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3261
diff changeset
4 -- Copyright (C) 2018 Emmanuel Gil Peyrot
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 679
diff changeset
5 --
289
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- 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
7 -- 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
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
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 local st = require "util.stanza"
3259
6824a1f3d8c0 mod_group_bookmarks: Remove duplicated requires.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1343
diff changeset
12 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
13
3259
6824a1f3d8c0 mod_group_bookmarks: Remove duplicated requires.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1343
diff changeset
14 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
15 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
16
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 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
18
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 local rooms;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 local members;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 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
23
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 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
25
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 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
27 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
28 data:reset();
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 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
30 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
31 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
32 name = room;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 jid = room;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 autojoin = "1";
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 });
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 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
37 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
38 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
39 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 data:up();
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 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 return data;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45
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
46 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
47 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
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;
3261
c2b1f64aaf97 mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3260
diff changeset
52 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
53 return;
c2b1f64aaf97 mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3260
diff changeset
54 end
3259
6824a1f3d8c0 mod_group_bookmarks: Remove duplicated requires.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1343
diff changeset
55 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
56 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
57 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
58 return true;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 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
60 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
61 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
62 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
63 end
3261
c2b1f64aaf97 mod_group_bookmarks: Return early when the key is not bookmarks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3260
diff changeset
64 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
65 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
66 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
67 :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
68 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
69 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 end, 1);
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 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
73 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
74
289
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 rooms = { default = {} };
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 members = { };
679
dcddd9195098 mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents: 290
diff changeset
77
dcddd9195098 mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents: 290
diff changeset
78 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
79 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
80 return;
dcddd9195098 mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents: 290
diff changeset
81 end
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 679
diff changeset
82
289
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 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
84 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
85 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
86 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
87 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
88 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
89 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
90 members[false] = {};
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 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
93 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 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
95 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
96 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
97 -- Add JID
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98 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
99 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
100 local jid;
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 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
102 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
103 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
104 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
105 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
106 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
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 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 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
111 end
415034fd38c2 mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112