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>
pull/46255/head
Côme Chilliet 2024-09-05 11:54:45 +07:00
parent 4ce4d7b9b3
commit c224b8ced4
No known key found for this signature in database
GPG Key ID: A3E2F658B28C760A
1 changed files with 30 additions and 16 deletions

@ -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, its 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, '/');