Software /
code /
prosody
Comparison
plugins/mod_private.lua @ 185:a67c88ce1c6a
Added support for XEP-0049: Private XML Storage (mod_private)
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sun, 26 Oct 2008 21:22:59 +0500 |
child | 310:b28b51746fe7 |
comparison
equal
deleted
inserted
replaced
184:6528845e8673 | 185:a67c88ce1c6a |
---|---|
1 | |
2 local st = require "util.stanza" | |
3 local send = require "core.sessionmanager".send_to_session | |
4 | |
5 local jid_split = require "util.jid".split; | |
6 local datamanager = require "util.datamanager" | |
7 | |
8 add_iq_handler("c2s", "jabber:iq:private", | |
9 function (session, stanza) | |
10 local type = stanza.attr.type; | |
11 local query = stanza.tags[1]; | |
12 if (type == "get" or type == "set") and query.name == "query" then | |
13 local node, host = jid_split(stanza.attr.to); | |
14 if not(node or host) or (node == session.username and host == session.host) then | |
15 node, host = session.username, session.host; | |
16 if #query.tags == 1 then | |
17 local tag = query.tags[1]; | |
18 local key = tag.name..":"..tag.attr.xmlns; | |
19 local data = datamanager.load(node, host, "private"); | |
20 if stanza.attr.type == "get" then | |
21 if data and data[key] then | |
22 send(session, st.reply(stanza):tag("query", {xmlns = "jabber:iq:private"}):add_child(st.deserialize(data[key]))); | |
23 else | |
24 send(session, st.reply(stanza):add_child(stanza.tags[1])); | |
25 end | |
26 else -- set | |
27 if not data then data = {}; end; | |
28 if #tag == 0 then | |
29 data[key] = nil; | |
30 else | |
31 data[key] = st.preserialize(tag); | |
32 end | |
33 -- TODO delete datastore if empty | |
34 if datamanager.store(node, host, "private", data) then | |
35 send(session, st.reply(stanza)); | |
36 else | |
37 send(session, st.error_reply(stanza, "wait", "internal-server-error")); | |
38 end | |
39 end | |
40 else | |
41 send(session, st.error_reply(stanza, "modify", "bad-format")); | |
42 end | |
43 else | |
44 send(session, st.error_reply(stanza, "cancel", "forbidden")); | |
45 end | |
46 end | |
47 end); |