6 -- COPYING file in the source package for more information. |
6 -- COPYING file in the source package for more information. |
7 -- |
7 -- |
8 |
8 |
9 local st = require "util.stanza" |
9 local st = require "util.stanza" |
10 local jid_split = require "util.jid".split; |
10 local jid_split = require "util.jid".split; |
11 local datamanager = require "util.datamanager" |
11 |
|
12 local vcards = module:open_store(); |
12 |
13 |
13 module:add_feature("vcard-temp"); |
14 module:add_feature("vcard-temp"); |
14 |
15 |
15 local function handle_vcard(event) |
16 local function handle_vcard(event) |
16 local session, stanza = event.origin, event.stanza; |
17 local session, stanza = event.origin, event.stanza; |
17 local to = stanza.attr.to; |
18 local to = stanza.attr.to; |
18 if stanza.attr.type == "get" then |
19 if stanza.attr.type == "get" then |
19 local vCard; |
20 local vCard; |
20 if to then |
21 if to then |
21 local node, host = jid_split(to); |
22 local node, host = jid_split(to); |
22 vCard = st.deserialize(datamanager.load(node, host, "vcard")); -- load vCard for user or server |
23 vCard = st.deserialize(vcards:get(node)); -- load vCard for user or server |
23 else |
24 else |
24 vCard = st.deserialize(datamanager.load(session.username, session.host, "vcard"));-- load user's own vCard |
25 vCard = st.deserialize(vcards:get(session.username));-- load user's own vCard |
25 end |
26 end |
26 if vCard then |
27 if vCard then |
27 session.send(st.reply(stanza):add_child(vCard)); -- send vCard! |
28 session.send(st.reply(stanza):add_child(vCard)); -- send vCard! |
28 else |
29 else |
29 session.send(st.error_reply(stanza, "cancel", "item-not-found")); |
30 session.send(st.error_reply(stanza, "cancel", "item-not-found")); |
30 end |
31 end |
31 else |
32 else |
32 if not to then |
33 if not to then |
33 if datamanager.store(session.username, session.host, "vcard", st.preserialize(stanza.tags[1])) then |
34 if vcards:set(session.username, st.preserialize(stanza.tags[1])) then |
34 session.send(st.reply(stanza)); |
35 session.send(st.reply(stanza)); |
35 else |
36 else |
36 -- TODO unable to write file, file may be locked, etc, what's the correct error? |
37 -- TODO unable to write file, file may be locked, etc, what's the correct error? |
37 session.send(st.error_reply(stanza, "wait", "internal-server-error")); |
38 session.send(st.error_reply(stanza, "wait", "internal-server-error")); |
38 end |
39 end |