2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
10 local st
= require
"util.stanza"
12 local private_storage
= module
:open_store("private", "map");
14 module
:add_feature("jabber:iq:private");
16 module
:hook("iq/self/jabber:iq:private:query", function(event
)
17 local origin
, stanza
= event
.origin
, event
.stanza
;
18 local query
= stanza
.tags
[1];
19 if #query
.tags
~= 1 then
20 origin
.send(st
.error_reply(stanza
, "modify", "bad-format"));
23 local tag = query
.tags
[1];
24 local key
= tag.name
..":"..tag.attr
.xmlns
;
25 if stanza
.attr
.type == "get" then
26 local data
, err
= private_storage
:get(origin
.username
, key
);
28 origin
.send(st
.reply(stanza
):query("jabber:iq:private"):add_child(st
.deserialize(data
)));
30 origin
.send(st
.error_reply(stanza
, "wait", "internal-server-error", err
));
32 origin
.send(st
.reply(stanza
):add_child(query
));
35 else -- stanza.attr.type == "set"
38 data
= st
.preserialize(tag);
40 -- TODO delete datastore if empty
41 local ok
, err
= private_storage
:set(origin
.username
, key
, data
);
43 origin
.send(st
.error_reply(stanza
, "wait", "internal-server-error", err
));
46 origin
.send(st
.reply(stanza
));