313 local set = require "prosody.util.set"; |
313 local set = require "prosody.util.set"; |
314 local it = require "prosody.util.iterators"; |
314 local it = require "prosody.util.iterators"; |
315 local ok = true; |
315 local ok = true; |
316 local function disabled_hosts(host, conf) return host ~= "*" and conf.enabled ~= false; end |
316 local function disabled_hosts(host, conf) return host ~= "*" and conf.enabled ~= false; end |
317 local function enabled_hosts() return it.filter(disabled_hosts, pairs(configmanager.getconfig())); end |
317 local function enabled_hosts() return it.filter(disabled_hosts, pairs(configmanager.getconfig())); end |
318 if not (what == nil or what == "disabled" or what == "config" or what == "dns" or what == "certs" or what == "connectivity" or what == "turn") then |
318 local checks = {}; |
319 show_warning("Don't know how to check '%s'. Try one of 'config', 'dns', 'certs', 'disabled', 'turn' or 'connectivity'.", what); |
319 function checks.disabled() |
320 show_warning("Note: The connectivity check will connect to a remote server."); |
|
321 return 1; |
|
322 end |
|
323 if not what or what == "disabled" then |
|
324 local disabled_hosts_set = set.new(); |
320 local disabled_hosts_set = set.new(); |
325 for host in it.filter("*", pairs(configmanager.getconfig())) do |
321 for host in it.filter("*", pairs(configmanager.getconfig())) do |
326 if api(host):get_option_boolean("enabled") == false then |
322 if api(host):get_option_boolean("enabled") == false then |
327 disabled_hosts_set:add(host); |
323 disabled_hosts_set:add(host); |
328 end |
324 end |
333 show_warning(msg, tostring(disabled_hosts_set)); |
329 show_warning(msg, tostring(disabled_hosts_set)); |
334 if what then return 0; end |
330 if what then return 0; end |
335 print"" |
331 print"" |
336 end |
332 end |
337 end |
333 end |
338 if not what or what == "config" then |
334 function checks.config() |
339 print("Checking config..."); |
335 print("Checking config..."); |
340 |
336 |
341 if what == "config" then |
337 if what == "config" then |
342 local files = configmanager.files(); |
338 local files = configmanager.files(); |
343 print(" The following configuration files have been loaded:"); |
339 print(" The following configuration files have been loaded:"); |
1113 print("For more information about DNS configuration please see https://prosody.im/doc/dns"); |
1109 print("For more information about DNS configuration please see https://prosody.im/doc/dns"); |
1114 print(""); |
1110 print(""); |
1115 ok = false; |
1111 ok = false; |
1116 end |
1112 end |
1117 end |
1113 end |
1118 if not what or what == "certs" then |
1114 function checks.certs() |
1119 local cert_ok; |
1115 local cert_ok; |
1120 print"Checking certificates..." |
1116 print"Checking certificates..." |
1121 local x509_verify_identity = require"prosody.util.x509".verify_identity; |
1117 local x509_verify_identity = require"prosody.util.x509".verify_identity; |
1122 local create_context = require "prosody.core.certmanager".create_context; |
1118 local create_context = require "prosody.core.certmanager".create_context; |
1123 local ssl = dependencies.softreq"ssl"; |
1119 local ssl = dependencies.softreq"ssl"; |
1135 print("Checking certificate for "..host); |
1131 print("Checking certificate for "..host); |
1136 -- First, let's find out what certificate this host uses. |
1132 -- First, let's find out what certificate this host uses. |
1137 local host_ssl_config = configmanager.rawget(host, "ssl") |
1133 local host_ssl_config = configmanager.rawget(host, "ssl") |
1138 or configmanager.rawget(host:match("%.(.*)"), "ssl"); |
1134 or configmanager.rawget(host:match("%.(.*)"), "ssl"); |
1139 local global_ssl_config = configmanager.rawget("*", "ssl"); |
1135 local global_ssl_config = configmanager.rawget("*", "ssl"); |
1140 local ok, err, ssl_config = create_context(host, "server", host_ssl_config, global_ssl_config); |
1136 local ctx_ok, err, ssl_config = create_context(host, "server", host_ssl_config, global_ssl_config); |
1141 if not ok then |
1137 if not ctx_ok then |
1142 print(" Error: "..err); |
1138 print(" Error: "..err); |
1143 cert_ok = false |
1139 cert_ok = false |
1144 elseif not ssl_config.certificate then |
1140 elseif not ssl_config.certificate then |
1145 print(" No 'certificate' found for "..host) |
1141 print(" No 'certificate' found for "..host) |
1146 cert_ok = false |
1142 cert_ok = false |
1194 ok = false |
1190 ok = false |
1195 end |
1191 end |
1196 print("") |
1192 print("") |
1197 end |
1193 end |
1198 -- intentionally not doing this by default |
1194 -- intentionally not doing this by default |
1199 if what == "connectivity" then |
1195 function checks.connectivity() |
1200 local _, prosody_is_running = is_prosody_running(); |
1196 local _, prosody_is_running = is_prosody_running(); |
1201 if api("*"):get_option_string("pidfile") and not prosody_is_running then |
1197 if api("*"):get_option_string("pidfile") and not prosody_is_running then |
1202 print("Prosody does not appear to be running, which is required for this test."); |
1198 print("Prosody does not appear to be running, which is required for this test."); |
1203 print("Start it and then try again."); |
1199 print("Start it and then try again."); |
1204 return 1; |
1200 return 1; |
1286 end |
1282 end |
1287 print("Note: The connectivity check only checks the reachability of the domain.") |
1283 print("Note: The connectivity check only checks the reachability of the domain.") |
1288 print("Note: It does not ensure that the check actually reaches this specific prosody instance.") |
1284 print("Note: It does not ensure that the check actually reaches this specific prosody instance.") |
1289 end |
1285 end |
1290 |
1286 |
1291 if not what or what == "turn" then |
1287 function checks.turn() |
1292 local turn_enabled_hosts = {}; |
1288 local turn_enabled_hosts = {}; |
1293 local turn_services = {}; |
1289 local turn_services = {}; |
1294 |
1290 |
1295 for host in enabled_hosts() do |
1291 for host in enabled_hosts() do |
1296 local has_external_turn = modulemanager.get_modules_for_host(host):contains("turn_external"); |
1292 local has_external_turn = modulemanager.get_modules_for_host(host):contains("turn_external"); |
1361 else |
1357 else |
1362 print("Success!\n"); |
1358 print("Success!\n"); |
1363 end |
1359 end |
1364 end |
1360 end |
1365 end |
1361 end |
|
1362 if what == nil or what == "all" then |
|
1363 local ret; |
|
1364 ret = checks.disabled(); |
|
1365 if ret ~= nil then return ret; end |
|
1366 ret = checks.config(); |
|
1367 if ret ~= nil then return ret; end |
|
1368 ret = checks.dns(); |
|
1369 if ret ~= nil then return ret; end |
|
1370 ret = checks.certs(); |
|
1371 if ret ~= nil then return ret; end |
|
1372 ret = checks.turn(); |
|
1373 if ret ~= nil then return ret; end |
|
1374 elseif checks[what] then |
|
1375 local ret = checks[what](); |
|
1376 if ret ~= nil then return ret; end |
|
1377 else |
|
1378 show_warning("Don't know how to check '%s'. Try one of 'config', 'dns', 'certs', 'disabled', 'turn' or 'connectivity'.", what); |
|
1379 show_warning("Note: The connectivity check will connect to a remote server."); |
|
1380 return 1; |
|
1381 end |
1366 |
1382 |
1367 if not ok then |
1383 if not ok then |
1368 print("Problems found, see above."); |
1384 print("Problems found, see above."); |
1369 else |
1385 else |
1370 print("All checks passed, congratulations!"); |
1386 print("All checks passed, congratulations!"); |