diff options
Diffstat (limited to 'apps/settings/lib/SetupChecks/JavaScriptModules.php')
-rw-r--r-- | apps/settings/lib/SetupChecks/JavaScriptModules.php | 57 |
1 files changed, 20 insertions, 37 deletions
diff --git a/apps/settings/lib/SetupChecks/JavaScriptModules.php b/apps/settings/lib/SetupChecks/JavaScriptModules.php index 151e04ecf2b..72f58405811 100644 --- a/apps/settings/lib/SetupChecks/JavaScriptModules.php +++ b/apps/settings/lib/SetupChecks/JavaScriptModules.php @@ -3,25 +3,8 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2023 Ferdinand Thiessen <opensource@fthiessen.de> - * - * @author Ferdinand Thiessen <opensource@fthiessen.de> - * - * @license AGPL-3.0-or-later - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace OCA\Settings\SetupChecks; @@ -29,6 +12,7 @@ use OCP\Http\Client\IClientService; use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\SetupCheck\CheckServerResponseTrait; use OCP\SetupCheck\ISetupCheck; use OCP\SetupCheck\SetupResult; use Psr\Log\LoggerInterface; @@ -37,12 +21,14 @@ use Psr\Log\LoggerInterface; * Checks if the webserver serves '.mjs' files using the correct MIME type */ class JavaScriptModules implements ISetupCheck { + use CheckServerResponseTrait; + public function __construct( - private IL10N $l10n, - private IConfig $config, - private IURLGenerator $urlGenerator, - private IClientService $clientService, - private LoggerInterface $logger, + protected IL10N $l10n, + protected IConfig $config, + protected IURLGenerator $urlGenerator, + protected IClientService $clientService, + protected LoggerInterface $logger, ) { } @@ -56,22 +42,19 @@ class JavaScriptModules implements ISetupCheck { public function run(): SetupResult { $testFile = $this->urlGenerator->linkTo('settings', 'js/esm-test.mjs'); - $testURLs = array_merge( - [$this->urlGenerator->getAbsoluteURL($testFile)], - array_map(fn (string $host): string => $host . $testFile, $this->config->getSystemValue('trusted_domains', [])) - ); - foreach ($testURLs as $testURL) { - try { - $client = $this->clientService->newClient(); - $response = $client->head($testURL, ['connect_timeout' => 10]); - if (preg_match('/(text|application)\/javascript/i', $response->getHeader('Content-Type'))) { - return SetupResult::success(); - } - } catch (\Throwable $e) { - $this->logger->debug('Can not connect to local server for checking JavaScript modules support', ['exception' => $e, 'url' => $testURL]); + $noResponse = true; + foreach ($this->runRequest('HEAD', $testFile) as $response) { + $noResponse = false; + if (preg_match('/(text|application)\/javascript/i', $response->getHeader('Content-Type'))) { + return SetupResult::success(); } } + + if ($noResponse) { + return SetupResult::warning($this->l10n->t('Unable to run check for JavaScript support. Please remedy or confirm manually if your webserver serves `.mjs` files using the JavaScript MIME type.') . "\n" . $this->serverConfigHelp()); + } return SetupResult::error($this->l10n->t('Your webserver does not serve `.mjs` files using the JavaScript MIME type. This will break some apps by preventing browsers from executing the JavaScript files. You should configure your webserver to serve `.mjs` files with either the `text/javascript` or `application/javascript` MIME type.')); + } } |