util.pubsub: Signal that 'persistent-items' is unsupported when disabled
authorKim Alvefur <zash@zash.se>
Thu, 22 Jul 2021 19:53:21 +0200
changeset 11727 3ead0967e04d
parent 11726 bc2d3f110a39
child 11728 86e68c0a4f05
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.
plugins/mod_pubsub/pubsub.lib.lua
spec/util_pubsub_spec.lua
util/pubsub.lua
--- 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);