plugins/mod_server_contact_info.lua
author Kim Alvefur <zash@zash.se>
Sat, 24 Feb 2024 00:05:29 +0100
changeset 13443 1e229d710a3c
parent 13441 1ba323d6f35c
child 13479 c14659710747
permissions -rw-r--r--
util.signal: Add support for signalfd(2) on Linux signalfd allows handling signal events using the same method as sockets, via file descriptors. Thus all signal dispatch can go through the same main event loop as everything else, removing need for thread-scary signal handling where execution would just jump to the signal handler regardless of the state of Lua, and needing to keep track of Lua states/threads.

-- XEP-0157: Contact Addresses for XMPP Services for Prosody
--
-- Copyright (C) 2011-2018 Kim Alvefur
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--

local array = require "prosody.util.array";
local jid = require "prosody.util.jid";
local url = require "socket.url";

module:depends("server_info");

-- Source: http://xmpp.org/registrar/formtypes.html#http:--jabber.org-network-serverinfo
local address_types = {
	abuse = "abuse-addresses";
	admin = "admin-addresses";
	feedback = "feedback-addresses";
	sales = "sales-addresses";
	security = "security-addresses";
	status = "status-addresses";
	support = "support-addresses";
};

-- JIDs of configured service admins are used as fallback
local admins = module:get_option_inherited_set("admins", {});

local contact_config = module:get_option("contact_info", {
	admin = array.collect(admins / jid.prep / function(admin) return url.build({scheme = "xmpp"; path = admin}); end);
});

local fields = {};

for key, field_var in pairs(address_types) do
	if contact_config[key] then
		table.insert(fields, {
			type = "list-multi";
			name = key;
			var = field_var;
			value = contact_config[key];
		});
	end
end

module:add_item("server-info-fields", fields);