diff --git a/DOCS/configuration.md b/DOCS/configuration.md
index 0ff0f40..bebfad5 100644
--- a/DOCS/configuration.md
+++ b/DOCS/configuration.md
@@ -215,3 +215,23 @@ Domain name that users need to direct their SFTP clients to. May be the same key
### `public_sftp_port`
Network port that users need to direct their SFTP clients to. The common default port is `22`.
+
+## `[check]`
+
+This configuration section is used only when running `check.php`.
+
+### `https_port`
+
+Port where the public nginx reverse proxy can be reached. Usually `443` for production.
+
+### `sftp_path`
+
+Filesystem path to the sftp binary.
+
+### `sshpass_path`
+
+Filesystem path to the sshpass binary.
+
+### `tor_proxy`
+
+Curl's [CURLOPT_PROXY](https://curl.se/libcurl/c/CURLOPT_PROXY.html) argument, used to test onion services.
diff --git a/config.template.ini b/config.template.ini
index 1c9cee6..a6fe2f1 100644
--- a/config.template.ini
+++ b/config.template.ini
@@ -66,3 +66,9 @@ sftp_fp = "/etc/sftpgo/ed25519.fp"
sftp_asciiart = "/etc/sftpgo/ed25519.asciiart"
sftp_domain = "sftp.servnest.test"
public_sftp_port = 2022
+
+[check]
+https_port = 42443
+sftp_path = "/usr/bin/sftp"
+sshpass_path = "/usr/bin/sshpass"
+tor_proxy = "socks5h://127.0.0.1:9050"
diff --git a/jobs/check.php b/jobs/check.php
index 7e5e5c5..0e5f47c 100644
--- a/jobs/check.php
+++ b/jobs/check.php
@@ -3,15 +3,14 @@
require __DIR__ . '/../init.php';
-const SFTP = '/usr/bin/sftp';
-const SSHPASS = '/usr/bin/sshpass';
-
const HTTPS_PORT = '42443';
-const CORE_DOMAIN = 'servnest.test';
-const CORE_URL = 'https://' . CORE_DOMAIN . ':' . HTTPS_PORT;
-const SUFFIX = 'test.servnest.test.';
+const CORE_URL = 'https://' . CONF['common']['public_domains'][0] . ':' . CONF['check']['https_port'];
-const TOR_PROXY = 'socks5h://127.0.0.1:9050';
+foreach (CONF['reg']['suffixes'] as $suffix => $openness)
+ if ($openness === 'all')
+ define('SUFFIX', $suffix);
+if (!defined('SUFFIX'))
+ exit('Unable to start tests: no suffix open to registration');
if (kdig(name: 'nlnet.nl', type: 'AAAA')['AD'] !== 1)
exit('DNS queries don\'t seem to be DNSSEC-validated.' . LF);
@@ -38,7 +37,7 @@ function curlTest(string $address, array $post = [], bool $tor = false): string
curl_setopt($req, CURLOPT_URL, $address);
if ($tor)
- curl_setopt($req, CURLOPT_PROXY, TOR_PROXY);
+ curl_setopt($req, CURLOPT_PROXY, CONF['check']['tor_proxy']);
else
curl_setopt($req, CURLOPT_SSL_VERIFYPEER, false);
@@ -71,7 +70,7 @@ curlTest('/auth/register', [
'username' => $username . '2',
'password' => $password,
]);
-curlTest('/auth/logout', []);
+curlTest('/auth/logout');
curlTest('/auth/login', [
'username' => $username,
@@ -118,14 +117,14 @@ function testReg(): string {
]);
{ // Domain transfer
- curlTest('/auth/logout', []);
+ curlTest('/auth/logout');
curlTest('/auth/login', [
'username' => $username . '2',
'password' => $password,
]);
- preg_match('#\(?[0-9a-z-]{16,128}\._transfer-verification\.' . preg_quote(CORE_DOMAIN, '#') . '\.)\
#', curlTest('/reg/transfer', []), $matches);
+ preg_match('#\(?[0-9a-z-]{16,128}\._transfer-verification\.' . preg_quote(CONF['common']['public_domains'][0], '#') . '\.)\
#', curlTest('/reg/transfer'), $matches);
- curlTest('/auth/logout', []);
+ curlTest('/auth/logout');
curlTest('/auth/login', [
'username' => $username,
'password' => $password,
@@ -136,7 +135,7 @@ function testReg(): string {
'ns' => $matches['token'],
]);
- curlTest('/auth/logout', []);
+ curlTest('/auth/logout');
curlTest('/auth/login', [
'username' => $username . '2',
'password' => $password,
@@ -161,7 +160,7 @@ function testNs(string $domain): void {
'ns' => $ns,
]);
- preg_match('#\(?[0-9a-z-]{16,128}\._domain-verification\.' . preg_quote(CORE_DOMAIN, '#') . '\.)\
#', curlTest('/ns/zone-add', []), $matches);
+ preg_match('#\(?[0-9a-z-]{16,128}\._domain-verification\.' . preg_quote(CONF['common']['public_domains'][0], '#') . '\.)\
#', curlTest('/ns/zone-add'), $matches);
curlTest('/reg/ns', [
'action' => 'add',
'domain' => $domain,
@@ -214,7 +213,7 @@ put ' . sys_get_temp_dir() . '/index.html /_site0-/index.html
exit
');
- $process = proc_open(SSHPASS . ' ' . SFTP . ' -o BatchMode=no -b ' . sys_get_temp_dir() . '/exec.txt -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -P ' . CONF['ht']['public_sftp_port'] . ' ' . $username . '@' . CONF['ht']['sftp_domain'], [0 => ['pipe', 'r']], $pipes);
+ $process = proc_open(CONF['check']['sshpass_path'] . ' ' . CONF['check']['sftp_path'] . ' -o BatchMode=no -b ' . sys_get_temp_dir() . '/exec.txt -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -P ' . CONF['ht']['public_sftp_port'] . ' ' . $username . '@' . CONF['ht']['sftp_domain'], [0 => ['pipe', 'r']], $pipes);
if (is_resource($process) !== true)
exit('Can\'t spawn sftp with sshpass.' . LF);
fwrite($pipes[0], $password);