view plugins/mod_csi.lua @ 14159:4bbb17445ed9 0.12 0.12.6

mod_proxy65: Consistently apply authorization checks The module checked for authorization when a client asked for the address:port of the proxy service. It did not check for authorization when processing a request to activate a bytestream. This meant that any unauthenticated party able to guess the IP/port and XMPP domain of a proxy65 service (generally low difficulty) would be able to use the proxy to relay traffic between two connections. This factors out the permission check, and applies it to every request type.
author Matthew Wild <mwild1@gmail.com>
date Wed, 29 Apr 2026 11:40:43 +0100
parents 0b04d25c4ffb
children 74b9e05af71e
line wrap: on
line source

local st = require "util.stanza";
local xmlns_csi = "urn:xmpp:csi:0";
local csi_feature = st.stanza("csi", { xmlns = xmlns_csi });

local csi_handler_available = nil;
module:hook("stream-features", function (event)
	if event.origin.username and csi_handler_available then
		event.features:add_child(csi_feature);
	end
end);

function refire_event(name)
	return function (event)
		if event.origin.username then
			event.origin.state = event.stanza.name;
			module:fire_event(name, event);
			return true;
		end
	end;
end

module:hook("stanza/"..xmlns_csi..":active", refire_event("csi-client-active"));
module:hook("stanza/"..xmlns_csi..":inactive", refire_event("csi-client-inactive"));

function module.load()
	if prosody.hosts[module.host].events._handlers["csi-client-active"] then
		csi_handler_available = true;
		module:set_status("core", "CSI handler module loaded");
	else
		csi_handler_available = false;
		module:set_status("warn", "No CSI handler module loaded");
	end
end
module:hook("module-loaded", module.load);
module:hook("module-unloaded", module.load);