view mod_isr/mod_isr.lua @ 6214:cc5c0f1dc89b

mod_muc_anonymize_moderation_actions: Fix mentioning Virtualhost for MUC, Compatibility section and License. diff --git a/mod_muc_anonymize_moderation_actions/README.md b/mod_muc_anonymize_moderation_actions/README.md --- a/mod_muc_anonymize_moderation_actions/README.md +++ b/mod_muc_anonymize_moderation_actions/README.md @@ -1,8 +1,10 @@ -<!-- -SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> -SPDX-License-Identifier: AGPL-3.0-only ---> -# mod_muc_anonymize_moderation_actions +--- +labels: +- 'Stage-Alpha' +summary: Anonymize moderator actions for participants +--- + +## Introduction This modules allows to anonymize affiliation and role changes in MUC rooms. @@ -11,13 +13,10 @@ When the feature is enabled, when a mode This is particularly usefull to prevent some revenge when a moderator bans someone. -This module is under AGPL-3.0 license. - -It was tested on Prosody 0.12.x. ## Configuration -Just enable the module on your MUC VirtualHost. +Just enable the module on your MUC Component. The feature will be accessible throught the room configuration form. You can tweak the position of the settings in the MUC configuration form using `anonymize_moderation_actions_form_position`. @@ -26,7 +25,20 @@ This value will be passed as priority fo By default, the field will be between muc#roomconfig_changesubject and muc#roomconfig_moderatedroom (default value is `78`). ``` lua -VirtualHost "muc.example.com" +Component "muc.example.com" "muc" modules_enabled = { "muc_anonymize_moderation_actions" } anonymize_moderation_actions_form_position = 96 ``` + +## Compatibility + + ------ ---------------------- + trunk Works as of 25-05-12 + 0.13 Works + 0.12 Works + ------ ---------------------- + +### License + +SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> +SPDX-License-Identifier: AGPL-3.0-only
author Menel <menel@snikket.de>
date Mon, 12 May 2025 10:42:26 +0200
parents 1cb762f72a91
children
line wrap: on
line source

local st = require "util.stanza";

local mod_smacks = module:depends("smacks");

local xmlns_sasl2 = "urn:xmpp:sasl:1";
local xmlns_sm = "urn:xmpp:sm:3";
local xmlns_isr = "https://xmpp.org/extensions/isr/0";
local xmlns_errors = "urn:ietf:params:xml:ns:xmpp-stanzas";

module:hook_tag(xmlns_sasl2, "authenticate", function (session, auth)
	local isr_resume = auth:get_child("inst-resume", xmlns_isr);
	if not isr_resume then return end
	local is_using_token = isr_resume.attr["with-isr-token"] ~= "false";
	if is_using_token then
		-- TODO: If authing with token, set session.sasl_handler to our own
		-- event.session.sasl_handler = ...
		error("not yet implemented");
	end

	-- Cache resume element for future processing after SASL success
	session.isr_sm_resume = isr_resume:get_child("resume", "urn:xmpp:sm:3");
end, 100);

module:hook("sasl2/c2s/success", function (event)
	local session = event.session;
	local sm_resume = session.isr_sm_resume;
	if sm_resume then
		session.isr_sm_resume = nil;
		local resumed, err = mod_smacks.do_resume(session, sm_resume);
		if not resumed then
			local failed = st.stanza("failed", { xmlns = xmlns_sm, h = ("%d"):format(err.context.h) })
				:tag(err.condition, { xmlns = xmlns_errors });
			event.success:add_child(failed);
		else
			event.session = resumed.session;
			event.isr_resumed = resumed;
			event.success:tag("resumed", { xmlns = xmlns_sm,
				h = ("%d"):format(event.session.handled_stanza_count);
				previd = resumed.id; }):up();
		end
	end
end, 100);

module:hook("sasl2/c2s/success", function (event)
	-- The authenticate response has already been sent at this point
	local resumed = event.isr_resumed;
	if resumed then
		resumed.finish(); -- Finish resume and sync stanzas
	end
end, -1100);

module:hook("sasl2/c2s/failure", function (event)
	event.session.isr_sm_resume = nil;
end);