Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>tags/v29.0.0beta1
@@ -88,6 +88,7 @@ return array( | |||
'OCA\\Settings\\SetupChecks\\FileLocking' => $baseDir . '/../lib/SetupChecks/FileLocking.php', | |||
'OCA\\Settings\\SetupChecks\\ForwardedForHeaders' => $baseDir . '/../lib/SetupChecks/ForwardedForHeaders.php', | |||
'OCA\\Settings\\SetupChecks\\InternetConnectivity' => $baseDir . '/../lib/SetupChecks/InternetConnectivity.php', | |||
'OCA\\Settings\\SetupChecks\\JavaScriptModules' => $baseDir . '/../lib/SetupChecks/JavaScriptModules.php', | |||
'OCA\\Settings\\SetupChecks\\LegacySSEKeyFormat' => $baseDir . '/../lib/SetupChecks/LegacySSEKeyFormat.php', | |||
'OCA\\Settings\\SetupChecks\\MaintenanceWindowStart' => $baseDir . '/../lib/SetupChecks/MaintenanceWindowStart.php', | |||
'OCA\\Settings\\SetupChecks\\MemcacheConfigured' => $baseDir . '/../lib/SetupChecks/MemcacheConfigured.php', |
@@ -103,6 +103,7 @@ class ComposerStaticInitSettings | |||
'OCA\\Settings\\SetupChecks\\FileLocking' => __DIR__ . '/..' . '/../lib/SetupChecks/FileLocking.php', | |||
'OCA\\Settings\\SetupChecks\\ForwardedForHeaders' => __DIR__ . '/..' . '/../lib/SetupChecks/ForwardedForHeaders.php', | |||
'OCA\\Settings\\SetupChecks\\InternetConnectivity' => __DIR__ . '/..' . '/../lib/SetupChecks/InternetConnectivity.php', | |||
'OCA\\Settings\\SetupChecks\\JavaScriptModules' => __DIR__ . '/..' . '/../lib/SetupChecks/JavaScriptModules.php', | |||
'OCA\\Settings\\SetupChecks\\LegacySSEKeyFormat' => __DIR__ . '/..' . '/../lib/SetupChecks/LegacySSEKeyFormat.php', | |||
'OCA\\Settings\\SetupChecks\\MaintenanceWindowStart' => __DIR__ . '/..' . '/../lib/SetupChecks/MaintenanceWindowStart.php', | |||
'OCA\\Settings\\SetupChecks\\MemcacheConfigured' => __DIR__ . '/..' . '/../lib/SetupChecks/MemcacheConfigured.php', |
@@ -0,0 +1,5 @@ | |||
/** | |||
* This is a dummy file for testing webserver support of JavaScript modules. | |||
*/ | |||
export default 'Hello' |
@@ -60,6 +60,7 @@ use OCA\Settings\SetupChecks\EmailTestSuccessful; | |||
use OCA\Settings\SetupChecks\FileLocking; | |||
use OCA\Settings\SetupChecks\ForwardedForHeaders; | |||
use OCA\Settings\SetupChecks\InternetConnectivity; | |||
use OCA\Settings\SetupChecks\JavaScriptModules; | |||
use OCA\Settings\SetupChecks\LegacySSEKeyFormat; | |||
use OCA\Settings\SetupChecks\MaintenanceWindowStart; | |||
use OCA\Settings\SetupChecks\MemcacheConfigured; | |||
@@ -177,6 +178,7 @@ class Application extends App implements IBootstrap { | |||
$context->registerSetupCheck(FileLocking::class); | |||
$context->registerSetupCheck(ForwardedForHeaders::class); | |||
$context->registerSetupCheck(InternetConnectivity::class); | |||
$context->registerSetupCheck(JavaScriptModules::class); | |||
$context->registerSetupCheck(LegacySSEKeyFormat::class); | |||
$context->registerSetupCheck(MaintenanceWindowStart::class); | |||
$context->registerSetupCheck(MemcacheConfigured::class); |
@@ -0,0 +1,77 @@ | |||
<?php | |||
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/>. | |||
* | |||
*/ | |||
namespace OCA\Settings\SetupChecks; | |||
use OCP\Http\Client\IClientService; | |||
use OCP\IConfig; | |||
use OCP\IL10N; | |||
use OCP\IURLGenerator; | |||
use OCP\SetupCheck\ISetupCheck; | |||
use OCP\SetupCheck\SetupResult; | |||
use Psr\Log\LoggerInterface; | |||
/** | |||
* Checks if the webserver serves '.mjs' files using the correct MIME type | |||
*/ | |||
class JavaScriptModules implements ISetupCheck { | |||
public function __construct( | |||
private IL10N $l10n, | |||
private IConfig $config, | |||
private IURLGenerator $urlGenerator, | |||
private IClientService $clientService, | |||
private LoggerInterface $logger, | |||
) { | |||
} | |||
public function getCategory(): string { | |||
return 'network'; | |||
} | |||
public function getName(): string { | |||
return $this->l10n->t('Supports JavaScript modules'); | |||
} | |||
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]); | |||
} | |||
} | |||
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.')); | |||
} | |||
} |