view mod_auto_activate_hosts/mod_auto_activate_hosts.lua @ 6352:525655adfd3e

mod_report_affiliations: Fix traceback a non-user is sending a presence For now we won’t touch their presence instead of emiting this traceback: error Traceback[s2s]: /usr/lib/prosody/core/rostermanager.lua:275: attempt to concatenate a nil value (local 'username') stack traceback: /usr/lib/prosody/core/rostermanager.lua:275: in function 'prosody.core.rostermanager.is_user_subscribed' ...ules/mod_report_affiliations/mod_report_affiliations.lua:116: in field '?' /usr/lib/prosody/util/events.lua:81: in function </usr/lib/prosody/util/events.lua:77> (...tail calls...) /usr/lib/prosody/core/stanza_router.lua:184: in upvalue 'core_post_stanza' /usr/lib/prosody/modules/mod_presence.lua:244: in function </usr/lib/prosody/modules/mod_presence.lua:231> (...tail calls...) /usr/lib/prosody/util/events.lua:81: in function </usr/lib/prosody/util/events.lua:77> (...tail calls...) /usr/lib/prosody/core/stanza_router.lua:188: in upvalue 'core_post_stanza' /usr/lib/prosody/core/stanza_router.lua:128: in upvalue 'core_process_stanza' /usr/lib/prosody/modules/mod_s2s.lua:818: in upvalue 'func' /usr/lib/prosody/util/async.lua:149: in function </usr/lib/prosody/util/async.lua:147>
author Link Mauve <linkmauve@linkmauve.fr>
date Tue, 30 Dec 2025 13:19:43 +0100
parents 8b7bca07f5c0
children
line wrap: on
line source

module:set_global();

local hostmanager = require"core.hostmanager";

local array = require "util.array";
local set = require "util.set";
local it = require "util.iterators";
local config = require "core.configmanager";

local function host_not_global(host)
	return host ~= "*";
end

local function host_is_enabled(host)
	return config.get(host, "enabled") ~= false;
end

function handle_reload()
	local new_config = config.getconfig();
	local active_hosts = set.new(array.collect(it.keys(prosody.hosts)):filter(host_not_global));
	local enabled_hosts = set.new(array.collect(it.keys(new_config)):filter(host_is_enabled):filter(host_not_global));
	local need_to_activate = enabled_hosts - active_hosts;
	local need_to_deactivate = active_hosts - enabled_hosts;

	module:log("debug", "Config reloaded... %d hosts need activating, and %d hosts need deactivating", it.count(need_to_activate), it.count(need_to_deactivate));
	module:log("debug", "There are %d enabled and %d active hosts", it.count(enabled_hosts), it.count(active_hosts));
	for host in need_to_deactivate do
		hostmanager.deactivate(host);
	end

	-- If the lazy loader is loaded, hosts will get activated when they are needed
	if not(getmetatable(prosody.hosts) and getmetatable(prosody.hosts).lazy_loader) then
		for host in need_to_activate do
			hostmanager.activate(host);
		end
	end
end

module:hook_global("config-reloaded", handle_reload);