view mod_default_vcard/mod_default_vcard.lua @ 5298:12f7d8b901e0

mod_audit: Support for adding location (GeoIP) to audit events This can be more privacy-friendly than logging full IP addresses, and also more informative to a user - IP addresses don't mean much to the average person, however if they see activity from outside their expected country, they can immediately identify suspicious activity. As with IPs, this field is configurable for deployments that would like to disable it. Location is also not logged when the geoip library is not available.
author Matthew Wild <mwild1@gmail.com>
date Sat, 01 Apr 2023 13:11:53 +0100
parents 7236cdec3ea1
children
line wrap: on
line source

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
		local name, first, last = data.name, data.first, data.last;
		if not name and (first and last) then
			name = first .. " " .. last;
		elseif name and not (first and last) then
			first, last = name:match("^(%w+)%s+(%w+)$")
		end
		local vcard = st.stanza("vCard", { xmlns = "vcard-temp" })
			:tag("VERSION"):text("3.0"):up();
		if first or last then
			vcard:tag("N")
				:tag("FAMILY"):text(last or ""):up()
				:tag("GIVEN"):text(first or ""):up()
			:up()
		end
		if name then
			vcard:tag("FN"):text(name or ""):up()
		end
		vcard:tag("NICKNAME"):text(data.nick or username):up();
		if data.email then
			vcard:tag("EMAIL"):tag("USERID"):text(data.email):up():up();
		end
		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);