File

plugins/mod_authz_internal.lua @ 13465:54a936345aaa 0.12

prosodyctl check: Warn about invalid domain names in the config file This ensures that domain names of virtual hosts and components are valid in XMPP, and that they are encoded correctly.
author Matthew Wild <mwild1@gmail.com>
date Wed, 27 Mar 2024 15:35:15 +0000
parent 11745:3a2d58a39872
child 12642:9061f9621330
line wrap: on
line source

local array = require "util.array";
local it = require "util.iterators";
local set = require "util.set";
local jid_split = require "util.jid".split;
local normalize = require "util.jid".prep;
local config_admin_jids = module:get_option_inherited_set("admins", {}) / normalize;
local host = module.host;
local role_store = module:open_store("roles");
local role_map_store = module:open_store("roles", "map");

local admin_role = { ["prosody:admin"] = true };

function get_user_roles(user)
	if config_admin_jids:contains(user.."@"..host) then
		return admin_role;
	end
	return role_store:get(user);
end

function set_user_roles(user, roles)
	role_store:set(user, roles)
	return true;
end

function get_users_with_role(role)
	local storage_role_users = it.to_array(it.keys(role_map_store:get_all(role) or {}));
	if role == "prosody:admin" then
		local config_admin_users = config_admin_jids / function (admin_jid)
			local j_node, j_host = jid_split(admin_jid);
			if j_host == host then
				return j_node;
			end
		end;
		return it.to_array(config_admin_users + set.new(storage_role_users));
	end
	return storage_role_users;
end

function get_jid_roles(jid)
	if config_admin_jids:contains(jid) then
		return admin_role;
	end
	return nil;
end

function set_jid_roles(jid) -- luacheck: ignore 212
	return false;
end

function get_jids_with_role(role)
	-- Fetch role users from storage
	local storage_role_jids = array.map(get_users_with_role(role), function (username)
		return username.."@"..host;
	end);
	if role == "prosody:admin" then
		return it.to_array(config_admin_jids + set.new(storage_role_jids));
	end
	return storage_role_jids;
end