util.prosodyctl.check: Validate format of module list options 0.12
authorKim Alvefur <zash@zash.se>
Mon, 17 Jul 2023 14:45:15 +0200
branch0.12
changeset 13221 b264ea91e930
parent 13220 fcc052ca1652
child 13222 e576c6a0d1f8
child 13223 22763b30e458
util.prosodyctl.check: Validate format of module list options Should detect things like misplaced settings inside modules_enabled
util/prosodyctl/check.lua
--- a/util/prosodyctl/check.lua	Mon Jul 17 14:03:13 2023 +0200
+++ b/util/prosodyctl/check.lua	Mon Jul 17 14:45:15 2023 +0200
@@ -496,6 +496,34 @@
 			print();
 		end
 
+		local function validate_module_list(host, name, modules)
+			if modules == nil then
+				return -- okay except for global section, checked separately
+			end
+			local t = type(modules)
+			if t ~= "table" then
+				print("    The " .. name .. " in the " .. host .. " section should not be a " .. t .. " but a list of strings, e.g.");
+				print("    " .. name .. " = { \"name_of_module\", \"another_plugin\", }")
+				print()
+				ok = false
+				return
+			end
+			for k, v in pairs(modules) do
+				if type(k) ~= "number" or type(v) ~= "string" then
+					print("    The " .. name .. " in the " .. host .. " section should not be a map of " .. type(k) .. " to " .. type(v)
+									.. " but a list of strings, e.g.");
+					print("    " .. name .. " = { \"name_of_module\", \"another_plugin\", }")
+					ok = false
+					break
+				end
+			end
+		end
+
+		for host, options in enabled_hosts() do
+			validate_module_list(host, "modules_enabled", options.modules_enabled);
+			validate_module_list(host, "modules_disabled", options.modules_disabled);
+		end
+
 		do -- Check for modules enabled both normally and as components
 			local modules = global:get_option_set("modules_enabled");
 			for host, options in enabled_hosts() do