Software /
code /
prosody
Changeset
11723:3ead0967e04d
util.pubsub: Signal that 'persistent-items' is unsupported when disabled
XEP-0060 says that this the way to indicate that 'persistent-items' is
unsupported, but doesn't explicitly say if it being disabled in the node
configuration also counts as unsupported.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 22 Jul 2021 19:53:21 +0200 |
parents | 11722:bc2d3f110a39 |
children | 11724:86e68c0a4f05 |
files | plugins/mod_pubsub/pubsub.lib.lua spec/util_pubsub_spec.lua util/pubsub.lua |
diffstat | 3 files changed, 7 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/mod_pubsub/pubsub.lib.lua Wed Jul 21 23:02:25 2021 +0200 +++ b/plugins/mod_pubsub/pubsub.lib.lua Thu Jul 22 19:53:21 2021 +0200 @@ -32,6 +32,7 @@ ["internal-server-error"] = { "wait", "internal-server-error" }; ["precondition-not-met"] = { "cancel", "conflict", nil, "precondition-not-met" }; ["invalid-item"] = { "modify", "bad-request", "invalid item" }; + ["persistent-items-unsupported"] = { "cancel", "feature-not-implemented", nil, "persistent-items" }; }; local function pubsub_error_reply(stanza, error) local e = pubsub_errors[error];
--- a/spec/util_pubsub_spec.lua Wed Jul 21 23:02:25 2021 +0200 +++ b/spec/util_pubsub_spec.lua Thu Jul 22 19:53:21 2021 +0200 @@ -523,8 +523,8 @@ assert.spy(broadcaster).was_called(); local ok, items = service:get_items("node", true); - assert.truthy(ok); - assert.same(items, {}); + assert.not_truthy(ok); + assert.equal(items, "persistent-items-unsupported"); end); end)
--- a/util/pubsub.lua Wed Jul 21 23:02:25 2021 +0200 +++ b/util/pubsub.lua Thu Jul 22 19:53:21 2021 +0200 @@ -652,13 +652,14 @@ if not node_obj then return false, "item-not-found"; end + if not self.data[node] then + -- Disabled rather than unsupported, but close enough. + return false, "persistent-items-unsupported"; + end if type(ids) == "string" then -- COMPAT see #1305 ids = { ids }; end local data = {}; - if not self.data[node] then - return true, data; - end if ids then for _, key in ipairs(ids) do local value = self.data[node]:get(key);