File

spec/muc_util_spec.lua @ 13587:fdb2e0568cf8

mod_authz_internal: Make 'prosody:guest' default role for all unknown JIDs This fixes an issue where e.g. remote users or even other users on the server were unable to list MUC rooms. We want to define a permission to list MUC rooms, but we want it to be available to everyone by default (the traditional behaviour). prosody:guest is the lowest role we have. I ran a quick check and it isn't really used for anything right now that would be concerning. It was originally designed for anonymous logins. I think it's safe to treat remote JIDs as equivalent, since we have no trust relationship with anonymous users either.
author Matthew Wild <mwild1@gmail.com>
date Tue, 07 Jan 2025 14:41:32 +0000 (4 months ago)
parent 10715:ad86b93093a3
line wrap: on
line source
local muc_util;

local st = require "util.stanza";

do
	-- XXX Hack for lack of a mock moduleapi
	local env = setmetatable({
		module = {
			_shared = {};
			-- Close enough to the real module:shared() for our purposes here
			shared = function (self, name)
				local t = self._shared[name];
				if t == nil then
					t = {};
					self._shared[name] = t;
				end
				return t;
			end;
		}
	}, { __index = _ENV or _G });
	muc_util = require "util.envload".envloadfile("plugins/muc/util.lib.lua", env)();
	end

describe("muc/util", function ()
	describe("filter_muc_x()", function ()
		it("correctly filters muc#user", function ()
			local stanza = st.message({ to = "to", from = "from", id = "foo" })
				:tag("x", { xmlns = "http://jabber.org/protocol/muc#user" })
					:tag("invite", { to = "user@example.com" });

			assert.equal(1, #stanza.tags);
			assert.equal(stanza, muc_util.filter_muc_x(stanza));
			assert.equal(0, #stanza.tags);
		end);

		it("correctly filters muc#user on a cloned stanza", function ()
			local stanza = st.message({ to = "to", from = "from", id = "foo" })
				:tag("x", { xmlns = "http://jabber.org/protocol/muc#user" })
					:tag("invite", { to = "user@example.com" });

			assert.equal(1, #stanza.tags);
			local filtered = muc_util.filter_muc_x(st.clone(stanza));
			assert.equal(1, #stanza.tags);
			assert.equal(0, #filtered.tags);
		end);
	end);
end);