Mercurial > prosody-hg
view plugins/mod_authz_internal.lua @ 11781:9c23e7c8a67a
mod_http_file_share: Add optional global quota on total storage usage
Before, maximum storage usage (assuming all users upload as much as they
could) would depend on the quota, retention period and number of users.
Since number of users can vary, this makes it hard to know how much
storage will be needed.
Adding a limit to the total overall storage use solves this, making it
simple to set it to some number based on what storage is actually
available.
Summary job run less often than the prune job since it touches the
entire archive; and started before the prune job since it's needed
before the first upload.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 12 Sep 2021 01:38:33 +0200 |
| parents | 3a2d58a39872 |
| children | 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
