diff options
author | Côme Chilliet <come.chilliet@nextcloud.com> | 2024-09-05 11:54:45 +0200 |
---|---|---|
committer | Côme Chilliet <come.chilliet@nextcloud.com> | 2024-09-05 11:54:45 +0200 |
commit | c224b8ced4e8e9ea2b69eca49ba258c45542e346 (patch) | |
tree | 9e204ef5cae3e26f29f9ac0f06d789339db0958c /apps | |
parent | 4ce4d7b9b31268f3b9242eaa73be6390890ef761 (diff) | |
download | nextcloud-server-c224b8ced4e8e9ea2b69eca49ba258c45542e346.tar.gz nextcloud-server-c224b8ced4e8e9ea2b69eca49ba258c45542e346.zip |
fix(setupchecks): Test overwrite.cli url first, then generated one, and
trusted domains as last fallback.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/settings/lib/SetupChecks/CheckServerResponseTrait.php | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/apps/settings/lib/SetupChecks/CheckServerResponseTrait.php b/apps/settings/lib/SetupChecks/CheckServerResponseTrait.php index 49a9bcee9d4..090e1322e2f 100644 --- a/apps/settings/lib/SetupChecks/CheckServerResponseTrait.php +++ b/apps/settings/lib/SetupChecks/CheckServerResponseTrait.php @@ -35,36 +35,49 @@ trait CheckServerResponseTrait { /** * Get all possible URLs that need to be checked for a local request test. + * This takes all `trusted_domains` and the CLI overwrite URL into account. * - * @param string $url The relative URL to test + * @param string $url The relative URL to test starting with a / * @return string[] List of possible absolute URLs */ protected function getTestUrls(string $url, bool $removeWebroot): array { $testUrls = []; - $webroot = $this->urlGenerator->getWebroot(); + $webroot = rtrim($this->urlGenerator->getWebroot(), '/'); - $baseUrl = $this->normalizeUrl( - $this->urlGenerator->getBaseUrl(), - $webroot, - $removeWebroot - ); + /* Try overwrite.cli.url first, it’s supposed to be how the server contacts itself */ + $cliUrl = $this->config->getSystemValueString('overwrite.cli.url', ''); - $testUrls[] = $baseUrl . $url; + if ($cliUrl !== '') { + $cliUrl = $this->normalizeUrl( + $cliUrl, + $webroot, + $removeWebroot + ); - $cliUrl = $this->config->getSystemValueString('overwrite.cli.url', ''); - if ($cliUrl === '') { - return $testUrls; + $testUrls[] = $cliUrl . $url; } - $cliUrl = $this->normalizeUrl( - $cliUrl, + /* Try URL generator second */ + $baseUrl = $this->normalizeUrl( + $this->urlGenerator->getBaseUrl(), $webroot, $removeWebroot ); - if ($cliUrl !== $baseUrl) { - $testUrls[] = $cliUrl . $url; + if ($baseUrl !== $cliUrl) { + $testUrls[] = $baseUrl . $url; + } + + /* Last resort: trusted domains */ + $hosts = $this->config->getSystemValue('trusted_domains', []); + foreach ($hosts as $host) { + if (str_contains($host, '*')) { + /* Ignore domains with a wildcard */ + continue; + } + $hosts[] = 'https://' . $host . $url; + $hosts[] = 'http://' . $host . $url; } return $testUrls; @@ -74,7 +87,8 @@ trait CheckServerResponseTrait { * Strip a trailing slash and remove the webroot if requested. */ protected function normalizeUrl(string $url, string $webroot, bool $removeWebroot): string { - if ($removeWebroot && str_contains($url, $webroot)) { + $url = rtrim($url, '/'); + if ($removeWebroot && str_ends_with($url, $webroot)) { $url = substr($url, -strlen($webroot)); } return rtrim($url, '/'); |