Comparison

plugins/mod_private.lua @ 6841:be87ab2d611c

plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
author Kim Alvefur <zash@zash.se>
date Mon, 21 Sep 2015 23:06:22 +0200
parent 6353:a868d5d6a83f
child 6843:161cccfdf015
comparison
equal deleted inserted replaced
6840:eeefe8d42b8b 6841:be87ab2d611c
15 15
16 module:hook("iq/self/jabber:iq:private:query", function(event) 16 module:hook("iq/self/jabber:iq:private:query", function(event)
17 local origin, stanza = event.origin, event.stanza; 17 local origin, stanza = event.origin, event.stanza;
18 local query = stanza.tags[1]; 18 local query = stanza.tags[1];
19 if #query.tags ~= 1 then 19 if #query.tags ~= 1 then
20 return origin.send(st.error_reply(stanza, "modify", "bad-format")); 20 origin.send(st.error_reply(stanza, "modify", "bad-format"));
21 return true;
21 end 22 end
22 local tag = query.tags[1]; 23 local tag = query.tags[1];
23 local key = tag.name..":"..tag.attr.xmlns; 24 local key = tag.name..":"..tag.attr.xmlns;
24 local data, err = private_storage:get(origin.username); 25 local data, err = private_storage:get(origin.username);
25 if err then 26 if err then
26 return origin.send(st.error_reply(stanza, "wait", "internal-server-error", err)); 27 origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
28 return true;
27 end 29 end
28 if stanza.attr.type == "get" then 30 if stanza.attr.type == "get" then
29 if data and data[key] then 31 if data and data[key] then
30 return origin.send(st.reply(stanza):query("jabber:iq:private"):add_child(st.deserialize(data[key]))); 32 origin.send(st.reply(stanza):query("jabber:iq:private"):add_child(st.deserialize(data[key])));
33 return true;
31 else 34 else
32 return origin.send(st.reply(stanza):add_child(query)); 35 origin.send(st.reply(stanza):add_child(query));
36 return true;
33 end 37 end
34 else -- type == set 38 else -- type == set
35 if not data then data = {}; end; 39 if not data then data = {}; end;
36 if #tag == 0 then 40 if #tag == 0 then
37 data[key] = nil; 41 data[key] = nil;
39 data[key] = st.preserialize(tag); 43 data[key] = st.preserialize(tag);
40 end 44 end
41 -- TODO delete datastore if empty 45 -- TODO delete datastore if empty
42 local ok, err = private_storage:set(origin.username, data); 46 local ok, err = private_storage:set(origin.username, data);
43 if not ok then 47 if not ok then
44 return origin.send(st.error_reply(stanza, "wait", "internal-server-error", err)); 48 origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
49 return true;
45 end 50 end
46 return origin.send(st.reply(stanza)); 51 origin.send(st.reply(stanza));
52 return true;
47 end 53 end
48 end); 54 end);