Software /
code /
prosody
File
plugins/mod_authz_internal.lua @ 12578:10bb58ad5583
executables: Reject Lua 5.1 early
Prevents attempting to load libraries that may no longer be found and
crashing with a traceback.
Platforms like Debian where multiple Lua versions can be installed at
the same time and 'lua' pointing to one of the installed interpreters
via symlinks, there's the possibility that prosody/prosodyctl may be
invoked with Lua 5.1, which will no longer have any of the rest of
Prosody libraries available to be require(), and thus would immediately
fail with an unfriendly traceback.
Checking and aborting early with a friendlier message and reference to
more information is better.
Part of #1600
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 02 Jul 2022 17:27:39 +0200 |
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