aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2024-09-05 11:54:45 +0200
committerCôme Chilliet <come.chilliet@nextcloud.com>2024-09-05 11:54:45 +0200
commitc224b8ced4e8e9ea2b69eca49ba258c45542e346 (patch)
tree9e204ef5cae3e26f29f9ac0f06d789339db0958c /apps
parent4ce4d7b9b31268f3b9242eaa73be6390890ef761 (diff)
downloadnextcloud-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.php46
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, '/');