diff options
author | blizzz <blizzz@arthur-schiwon.de> | 2020-08-07 20:55:04 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-07 20:55:04 +0000 |
commit | 326a04d12cd12b76950fe1c858123adc40c1c74c (patch) | |
tree | 1d2408d61ebce18c987e66dccce309e416fc2377 /apps | |
parent | 54726d5934c47cd643900bb17e4ccc4f56e946bd (diff) | |
parent | c1831f19025ba7b2919844c8fe5e5bef1c6c7ca6 (diff) | |
download | nextcloud-server-326a04d12cd12b76950fe1c858123adc40c1c74c.tar.gz nextcloud-server-326a04d12cd12b76950fe1c858123adc40c1c74c.zip |
Merge pull request #22004 from nextcloud/enh/noid/setup-checks-php
Add setup checks for php default charset and output buffering.
Diffstat (limited to 'apps')
8 files changed, 187 insertions, 0 deletions
diff --git a/apps/settings/composer/composer/autoload_classmap.php b/apps/settings/composer/composer/autoload_classmap.php index 480d84e3639..e59b2e7fdbb 100644 --- a/apps/settings/composer/composer/autoload_classmap.php +++ b/apps/settings/composer/composer/autoload_classmap.php @@ -54,4 +54,6 @@ return array( 'OCA\\Settings\\Settings\\Personal\\Security\\TwoFactor' => $baseDir . '/../lib/Settings/Personal/Security/TwoFactor.php', 'OCA\\Settings\\Settings\\Personal\\Security\\WebAuthn' => $baseDir . '/../lib/Settings/Personal/Security/WebAuthn.php', 'OCA\\Settings\\Settings\\Personal\\ServerDevNotice' => $baseDir . '/../lib/Settings/Personal/ServerDevNotice.php', + 'OCA\\Settings\\SetupChecks\\PhpDefaultCharset' => $baseDir . '/../lib/SetupChecks/PhpDefaultCharset.php', + 'OCA\\Settings\\SetupChecks\\PhpOutputBuffering' => $baseDir . '/../lib/SetupChecks/PhpOutputBuffering.php', ); diff --git a/apps/settings/composer/composer/autoload_static.php b/apps/settings/composer/composer/autoload_static.php index d98e58c1c67..4d69a0193a7 100644 --- a/apps/settings/composer/composer/autoload_static.php +++ b/apps/settings/composer/composer/autoload_static.php @@ -69,6 +69,8 @@ class ComposerStaticInitSettings 'OCA\\Settings\\Settings\\Personal\\Security\\TwoFactor' => __DIR__ . '/..' . '/../lib/Settings/Personal/Security/TwoFactor.php', 'OCA\\Settings\\Settings\\Personal\\Security\\WebAuthn' => __DIR__ . '/..' . '/../lib/Settings/Personal/Security/WebAuthn.php', 'OCA\\Settings\\Settings\\Personal\\ServerDevNotice' => __DIR__ . '/..' . '/../lib/Settings/Personal/ServerDevNotice.php', + 'OCA\\Settings\\SetupChecks\\PhpDefaultCharset' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpDefaultCharset.php', + 'OCA\\Settings\\SetupChecks\\PhpOutputBuffering' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpOutputBuffering.php', ); public static function getInitializer(ClassLoader $loader) diff --git a/apps/settings/lib/Controller/CheckSetupController.php b/apps/settings/lib/Controller/CheckSetupController.php index 3fd4407f7c9..6e45edee18f 100644 --- a/apps/settings/lib/Controller/CheckSetupController.php +++ b/apps/settings/lib/Controller/CheckSetupController.php @@ -53,6 +53,8 @@ use OC\DB\SchemaWrapper; use OC\IntegrityCheck\Checker; use OC\Lock\NoopLockingProvider; use OC\MemoryInfo; +use OCA\Settings\SetupChecks\PhpDefaultCharset; +use OCA\Settings\SetupChecks\PhpOutputBuffering; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\DataDisplayResponse; use OCP\AppFramework\Http\DataResponse; @@ -683,6 +685,8 @@ Raw output * @return DataResponse */ public function check() { + $phpDefaultCharset = new PhpDefaultCharset(); + $phpOutputBuffering = new PhpOutputBuffering(); return new DataResponse( [ 'isGetenvServerWorking' => !empty(getenv('PATH')), @@ -723,6 +727,8 @@ Raw output 'isMysqlUsedWithoutUTF8MB4' => $this->isMysqlUsedWithoutUTF8MB4(), 'isEnoughTempSpaceAvailableIfS3PrimaryStorageIsUsed' => $this->isEnoughTempSpaceAvailableIfS3PrimaryStorageIsUsed(), 'reverseProxyGeneratedURL' => $this->urlGenerator->getAbsoluteURL('index.php'), + PhpDefaultCharset::class => ['pass' => $phpDefaultCharset->run(), 'description' => $phpDefaultCharset->description(), 'severity' => $phpDefaultCharset->severity()], + PhpOutputBuffering::class => ['pass' => $phpOutputBuffering->run(), 'description' => $phpOutputBuffering->description(), 'severity' => $phpOutputBuffering->severity()], ] ); } diff --git a/apps/settings/lib/SetupChecks/PhpDefaultCharset.php b/apps/settings/lib/SetupChecks/PhpDefaultCharset.php new file mode 100644 index 00000000000..0e50a8db1fc --- /dev/null +++ b/apps/settings/lib/SetupChecks/PhpDefaultCharset.php @@ -0,0 +1,42 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2020 Daniel Kesselberg <mail@danielkesselberg.de> + * + * @author Daniel Kesselberg <mail@danielkesselberg.de> + * + * @license GNU AGPL version 3 or any later version + * + * 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-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\Settings\SetupChecks; + +class PhpDefaultCharset { + public function description(): string { + return 'PHP configuration option default_charset should be UTF-8'; + } + + public function severity(): string { + return 'warning'; + } + + public function run(): bool { + return strtoupper(trim(ini_get('default_charset'))) === 'UTF-8'; + } +} diff --git a/apps/settings/lib/SetupChecks/PhpOutputBuffering.php b/apps/settings/lib/SetupChecks/PhpOutputBuffering.php new file mode 100644 index 00000000000..c89ec273e71 --- /dev/null +++ b/apps/settings/lib/SetupChecks/PhpOutputBuffering.php @@ -0,0 +1,43 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2020 Daniel Kesselberg <mail@danielkesselberg.de> + * + * @author Daniel Kesselberg <mail@danielkesselberg.de> + * + * @license GNU AGPL version 3 or any later version + * + * 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-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\Settings\SetupChecks; + +class PhpOutputBuffering { + public function description(): string { + return 'PHP configuration option output_buffering must be disabled'; + } + + public function severity(): string { + return 'error'; + } + + public function run(): bool { + $value = trim(ini_get('output_buffering')); + return $value === '' || $value === '0'; + } +} diff --git a/apps/settings/tests/Controller/CheckSetupControllerTest.php b/apps/settings/tests/Controller/CheckSetupControllerTest.php index ebbe9fd95b7..271427d455a 100644 --- a/apps/settings/tests/Controller/CheckSetupControllerTest.php +++ b/apps/settings/tests/Controller/CheckSetupControllerTest.php @@ -593,6 +593,8 @@ class CheckSetupControllerTest extends TestCase { 'isMysqlUsedWithoutUTF8MB4' => false, 'isEnoughTempSpaceAvailableIfS3PrimaryStorageIsUsed' => true, 'reverseProxyGeneratedURL' => 'https://server/index.php', + 'OCA\Settings\SetupChecks\PhpDefaultCharset' => ['pass' => true, 'description' => 'PHP configuration option default_charset should be UTF-8', 'severity' => 'warning'], + 'OCA\Settings\SetupChecks\PhpOutputBuffering' => ['pass' => true, 'description' => 'PHP configuration option output_buffering must be disabled', 'severity' => 'error'], ] ); $this->assertEquals($expected, $this->checkSetupController->check()); diff --git a/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php b/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php new file mode 100644 index 00000000000..18a72dc2ff8 --- /dev/null +++ b/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php @@ -0,0 +1,47 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2020 Daniel Kesselberg <mail@danielkesselberg.de> + * + * @author Daniel Kesselberg <mail@danielkesselberg.de> + * + * @license GNU AGPL version 3 or any later version + * + * 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-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\Settings\Tests; + +use OCA\Settings\SetupChecks\PhpDefaultCharset; +use Test\TestCase; + +class PhpDefaultCharsetTest extends TestCase { + public function testPass(): void { + $check = new PhpDefaultCharset(); + $this->assertTrue($check->run()); + } + + public function testFail(): void { + ini_set('default_charset', 'ISO-8859-15'); + + $check = new PhpDefaultCharset(); + $this->assertFalse($check->run()); + + ini_restore('default_charset'); + } +} diff --git a/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php b/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php new file mode 100644 index 00000000000..83d560d281d --- /dev/null +++ b/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php @@ -0,0 +1,43 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2020 Daniel Kesselberg <mail@danielkesselberg.de> + * + * @author Daniel Kesselberg <mail@danielkesselberg.de> + * + * @license GNU AGPL version 3 or any later version + * + * 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-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\Settings\Tests; + +use OCA\Settings\SetupChecks\PhpOutputBuffering; +use Test\TestCase; + +class PhpOutputBufferingTest extends TestCase { + /* + * output_buffer is PHP_INI_PERDIR and cannot changed at runtime. + * Run this test with -d output_buffering=1 to validate the fail case. + */ + + public function testPass(): void { + $check = new PhpOutputBuffering(); + $this->assertTrue($check->run()); + } +} |