plugins/mod_vcard.lua
changeset 5500 eeea0eb2602a
parent 5017 a6bae9d72c8f
child 5776 bd0ff8ae98a8
equal deleted inserted replaced
5498:2a67235e1d4d 5500:eeea0eb2602a
     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