Diff

mod_default_vcard/mod_default_vcard.lua @ 455:52f2188ec47d

mod_default_vcard: Sets initial vCard from data enterd on registration
author Kim Alvefur <zash@zash.se>
date Sat, 15 Oct 2011 13:43:37 +0200
child 936:7236cdec3ea1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_default_vcard/mod_default_vcard.lua	Sat Oct 15 13:43:37 2011 +0200
@@ -0,0 +1,28 @@
+local datamanager = require "util.datamanager";
+local st = require "util.stanza";
+local host = module.host;
+
+module:hook("user-registered", function(event)
+	local username = event.username;
+	local data = datamanager.load(username, host, "account_details");
+	local vcard = datamanager.load(username, host, "vcard");
+	--module:log("debug", "Has account details: %s", data and "yes" or "no");
+	--module:log("debug", "Has vCard: %s", vcard and "yes" or "no");
+	if data and not vcard then
+		-- MAYBE
+		-- first .. " " .. last
+		-- first, last = name:match("^(%w+) (%w+)$")
+		local vcard = st.stanza("vCard", { xmlns = "vcard-temp" })
+			:tag("VERSION"):text("3.0"):up()
+			:tag("N")
+				:tag("FAMILY"):text(data.last or ""):up()
+				:tag("GIVEN"):text(data.first or ""):up()
+			:up()
+			:tag("FN"):text(data.name or ""):up()
+			:tag("NICKNAME"):text(data.nick or username):up();
+		local ok, err = datamanager.store(username, host, "vcard", st.preserialize(vcard));
+		if not ok then
+			module:log("error", "Couldn't save vCard data, %s", err);
+		end
+	end
+end);