pubsub: Distinguish internal representation of node config from XEP-0060 form (util.pubsub should be protocol-agnostic)
authorKim Alvefur <zash@zash.se>
Tue, 17 Oct 2017 05:47:06 +0200
changeset 8336 2abbb01cd756
parent 8335 e89b57d0d80a
child 8337 036e46d12b78
pubsub: Distinguish internal representation of node config from XEP-0060 form (util.pubsub should be protocol-agnostic)
plugins/mod_pep_plus.lua
plugins/mod_pubsub/pubsub.lib.lua
util/pubsub.lua
--- a/plugins/mod_pep_plus.lua	Tue Oct 17 05:30:09 2017 +0200
+++ b/plugins/mod_pep_plus.lua	Tue Oct 17 05:47:06 2017 +0200
@@ -43,7 +43,7 @@
 
 local function simple_itemstore(username)
 	return function (config, node)
-		if config["pubsub#persist_items"] then
+		if config["persist_items"] then
 			module:log("debug", "Creating new persistent item store for user %s, node %q", username, node);
 			known_nodes_map:set(username, node, true);
 			local archive = module:open_store("pep_"..node, "archive");
@@ -51,7 +51,7 @@
 		else
 			module:log("debug", "Creating new ephemeral item store for user %s, node %q", username, node);
 			known_nodes_map:set(username, node, nil);
-			return cache.new(tonumber(config["pubsub#max_items"]));
+			return cache.new(tonumber(config["max_items"]));
 		end
 	end
 end
@@ -179,8 +179,8 @@
 		};
 
 		node_defaults = {
-			["pubsub#max_items"] = "1";
-			["pubsub#persist_items"] = true;
+			["max_items"] = 1;
+			["persist_items"] = true;
 		};
 
 		autocreate_on_publish = true;
--- a/plugins/mod_pubsub/pubsub.lib.lua	Tue Oct 17 05:30:09 2017 +0200
+++ b/plugins/mod_pubsub/pubsub.lib.lua	Tue Oct 17 05:47:06 2017 +0200
@@ -282,10 +282,15 @@
 		return true;
 	end
 
+	local node_config = node_obj.config;
+	local pubsub_form_data = {
+		["pubsub#max_items"] = tostring(node_config["max_items"]);
+		["pubsub#persist_items"] = node_config["persist_items"]
+	}
 	local reply = st.reply(stanza)
 		:tag("pubsub", { xmlns = xmlns_pubsub_owner })
 			:tag("configure", { node = node })
-				:add_child(node_config_form:form(node_obj.config));
+				:add_child(node_config_form:form(pubsub_form_data));
 	origin.send(reply);
 	return true;
 end
@@ -305,11 +310,15 @@
 		origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing dataform"));
 		return true;
 	end
-	local new_config, err = node_config_form:data(config_form);
-	if not new_config then
+	local form_data, err = node_config_form:data(config_form);
+	if not form_data then
 		origin.send(st.error_reply(stanza, "modify", "bad-request", err));
 		return true;
 	end
+	local new_config = {
+		["max_items"] = tonumber(form_data["pubsub#max_items"]);
+		["persist_items"] = form_data["pubsub#persist_items"];
+	};
 	local ok, err = service:set_node_config(node, stanza.attr.from, new_config);
 	if not ok then
 		origin.send(pubsub_error_reply(stanza, err));
@@ -320,10 +329,14 @@
 end
 
 function handlers.get_default(origin, stanza, default, service)
+	local pubsub_form_data = {
+		["pubsub#max_items"] = tostring(service.node_defaults["max_items"]);
+		["pubsub#persist_items"] = service.node_defaults["persist_items"]
+	}
 	local reply = st.reply(stanza)
 		:tag("pubsub", { xmlns = xmlns_pubsub_owner })
 			:tag("default")
-				:add_child(node_config_form:form(service.node_defaults));
+				:add_child(node_config_form:form(pubsub_form_data));
 	origin.send(reply);
 	return true;
 end
--- a/util/pubsub.lua	Tue Oct 17 05:30:09 2017 +0200
+++ b/util/pubsub.lua	Tue Oct 17 05:47:06 2017 +0200
@@ -5,13 +5,14 @@
 local service_mt = { __index = service };
 
 local default_config = { __index = {
-	itemstore = function (config, _) return cache.new(tonumber(config["pubsub#max_items"])) end;
+	itemstore = function (config, _) return cache.new(config["max_items"]) end;
 	broadcaster = function () end;
 	get_affiliation = function () end;
 	capabilities = {};
 } };
 local default_node_config = { __index = {
-	["pubsub#max_items"] = "20";
+	["persist_items"] = false;
+	["max_items"] = 20;
 } };
 
 local function new(config)