Comparison

util/prosodyctl/check.lua @ 11798:ba88060fa145

util.prosodyctl.check: Suggest replacements for deprecated options #1684
author Kim Alvefur <zash@zash.se>
date Tue, 14 Sep 2021 01:34:30 +0200
parent 11783:7bf246e6792b
child 11799:8c9ec2db1d95
comparison
equal deleted inserted replaced
11797:72a2b85c0537 11798:ba88060fa145
61 if arg[1] == "--help" then 61 if arg[1] == "--help" then
62 show_usage([[check]], [[Perform basic checks on your Prosody installation]]); 62 show_usage([[check]], [[Perform basic checks on your Prosody installation]]);
63 return 1; 63 return 1;
64 end 64 end
65 local what = table.remove(arg, 1); 65 local what = table.remove(arg, 1);
66 local array = require "util.array";
66 local set = require "util.set"; 67 local set = require "util.set";
67 local it = require "util.iterators"; 68 local it = require "util.iterators";
68 local ok = true; 69 local ok = true;
69 local function disabled_hosts(host, conf) return host ~= "*" and conf.enabled ~= false; end 70 local function disabled_hosts(host, conf) return host ~= "*" and conf.enabled ~= false; end
70 local function enabled_hosts() return it.filter(disabled_hosts, pairs(configmanager.getconfig())); end 71 local function enabled_hosts() return it.filter(disabled_hosts, pairs(configmanager.getconfig())); end
88 print"" 89 print""
89 end 90 end
90 end 91 end
91 if not what or what == "config" then 92 if not what or what == "config" then
92 print("Checking config..."); 93 print("Checking config...");
93 local deprecated = set.new({ 94 local obsolete = set.new({ --> remove
94 "anonymous_login",
95 "bosh_ports",
96 "cross_domain_bosh", 95 "cross_domain_bosh",
97 "cross_domain_websocket", 96 "cross_domain_websocket",
98 "daemonize",
99 "disallow_s2s",
100 "legacy_ssl_interfaces",
101 "legacy_ssl_port",
102 "legacy_ssl_ports",
103 "legacy_ssl_ssl",
104 "no_daemonize",
105 "require_encryption",
106 "vcard_compatibility",
107 }); 97 });
98 local deprecated_replacements = {
99 anonymous_login = "use 'authentication = \"anonymous\"'",
100 daemonize = "use the --daemonize/-D or --foreground/-F command line flags",
101 disallow_s2s = "add \"s2s\" to 'modules_disabled'",
102 no_daemonize = "use the --daemonize/-D or --foreground/-F flags",
103 require_encryption = "use 'c2s_require_encryption' and 's2s_require_encryption'",
104 vcard_compatibility = "use 'mod_compat_vcard' from prosody-modules",
105 };
106 local deprecated_ports = { bosh = "http", legacy_ssl = "c2s_direct_tls" };
107 local port_suffixes = set.new({ "port", "ports", "interface", "interfaces", "ssl" });
108 for port, replacement in pairs(deprecated_ports) do
109 for suffix in port_suffixes do
110 deprecated_replacements[port.."_"..suffix] = "use '"..replacement.."_"..suffix.."'"
111 end
112 end
113 local deprecated = set.new(array.collect(it.keys(deprecated_replacements)));
108 local known_global_options = set.new({ 114 local known_global_options = set.new({
109 "access_control_allow_credentials", 115 "access_control_allow_credentials",
110 "access_control_allow_headers", 116 "access_control_allow_headers",
111 "access_control_allow_methods", 117 "access_control_allow_methods",
112 "access_control_max_age", 118 "access_control_max_age",
219 end 225 end
220 end 226 end
221 227
222 -- Check for global options under hosts 228 -- Check for global options under hosts
223 local global_options = set.new(it.to_array(it.keys(config["*"]))); 229 local global_options = set.new(it.to_array(it.keys(config["*"])));
230 local obsolete_global_options = set.intersection(global_options, obsolete);
231 if not obsolete_global_options:empty() then
232 print("");
233 print(" You have some obsolete options you can remove from the global section:");
234 print(" "..tostring(obsolete_global_options))
235 ok = false;
236 end
224 local deprecated_global_options = set.intersection(global_options, deprecated); 237 local deprecated_global_options = set.intersection(global_options, deprecated);
225 if not deprecated_global_options:empty() then 238 if not deprecated_global_options:empty() then
226 print(""); 239 print("");
227 print(" You have some deprecated options in the global section:"); 240 print(" You have some deprecated options in the global section:");
228 print(" "..tostring(deprecated_global_options)) 241 for option in deprecated_global_options do
242 print((" '%s' -- instead, %s"):format(option, deprecated_replacements[option]));
243 end
229 ok = false; 244 ok = false;
230 -- FIXME show replacement options where applicable
231 end 245 end
232 for host, options in it.filter(function (h) return h ~= "*" end, pairs(configmanager.getconfig())) do 246 for host, options in it.filter(function (h) return h ~= "*" end, pairs(configmanager.getconfig())) do
233 local host_options = set.new(it.to_array(it.keys(options))); 247 local host_options = set.new(it.to_array(it.keys(options)));
234 local misplaced_options = set.intersection(host_options, known_global_options); 248 local misplaced_options = set.intersection(host_options, known_global_options);
235 for name in pairs(options) do 249 for name in pairs(options) do