Skip to content

Commit

Permalink
fix(setupchecks): Test overwrite.cli url first, then generated one, and
Browse files Browse the repository at this point in the history
 trusted domains as last fallback.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
  • Loading branch information
come-nc authored and backportbot[bot] committed Sep 5, 2024
1 parent e004fb7 commit 48c807e
Showing 1 changed file with 30 additions and 16 deletions.
46 changes: 30 additions & 16 deletions apps/settings/lib/SetupChecks/CheckServerResponseTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,36 +52,49 @@ protected function serverConfigHelp(): string {

/**
* 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;
Expand All @@ -91,7 +104,8 @@ protected function getTestUrls(string $url, bool $removeWebroot): array {
* 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, '/');
Expand Down

0 comments on commit 48c807e

Please sign in to comment.