mirror of
https://github.com/bjc/prosody.git
synced 2025-04-01 20:27:39 +03:00
util.pubsub: Add method returning subset of config as metadata
Allows granting read only access to other sets of users using a separate access control capability, which makes sense as some properties may be intended to be public but read-only.
This commit is contained in:
parent
ef342f9734
commit
9005d35b48
2 changed files with 29 additions and 0 deletions
|
@ -605,4 +605,14 @@ describe("util.pubsub", function ()
|
|||
end);
|
||||
|
||||
end)
|
||||
|
||||
describe("metadata", function()
|
||||
it("works", function()
|
||||
local service = pubsub.new { metadata_subset = { "title" } };
|
||||
assert.truthy(service:create("node", true, { title = "Hello", secret = "hidden" }))
|
||||
local ok, meta = service:get_node_metadata("node", "nobody");
|
||||
assert.truthy(ok, meta);
|
||||
assert.same({ title = "Hello" }, meta);
|
||||
end)
|
||||
end);
|
||||
end);
|
||||
|
|
|
@ -11,6 +11,7 @@ local default_config = {
|
|||
itemcheck = function () return true; end;
|
||||
get_affiliation = function () end;
|
||||
normalize_jid = function (jid) return jid; end;
|
||||
metadata_subset = {};
|
||||
capabilities = {
|
||||
outcast = {
|
||||
create = false;
|
||||
|
@ -45,6 +46,7 @@ local default_config = {
|
|||
get_subscription = true;
|
||||
get_subscriptions = true;
|
||||
get_items = false;
|
||||
get_metadata = true;
|
||||
|
||||
subscribe_other = false;
|
||||
unsubscribe_other = false;
|
||||
|
@ -67,6 +69,7 @@ local default_config = {
|
|||
get_subscription = true;
|
||||
get_subscriptions = true;
|
||||
get_items = true;
|
||||
get_metadata = true;
|
||||
|
||||
subscribe_other = false;
|
||||
unsubscribe_other = false;
|
||||
|
@ -90,6 +93,7 @@ local default_config = {
|
|||
get_subscription = true;
|
||||
get_subscriptions = true;
|
||||
get_items = true;
|
||||
get_metadata = true;
|
||||
|
||||
subscribe_other = false;
|
||||
unsubscribe_other = false;
|
||||
|
@ -115,6 +119,7 @@ local default_config = {
|
|||
get_subscription = true;
|
||||
get_subscriptions = true;
|
||||
get_items = true;
|
||||
get_metadata = true;
|
||||
|
||||
|
||||
subscribe_other = true;
|
||||
|
@ -872,6 +877,20 @@ function service:get_node_config(node, actor) --> (true, config) or (false, err)
|
|||
return true, config_table;
|
||||
end
|
||||
|
||||
function service:get_node_metadata(node, actor)
|
||||
if not self:may(node, actor, "get_metadata") then
|
||||
return false, "forbidden";
|
||||
end
|
||||
|
||||
local ok, config = self:get_node_config(node, true);
|
||||
if not ok then return ok, config; end
|
||||
local meta = {};
|
||||
for _, k in ipairs(self.config.metadata_subset) do
|
||||
meta[k] = config[k];
|
||||
end
|
||||
return true, meta;
|
||||
end
|
||||
|
||||
return {
|
||||
new = new;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue