summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2023-10-09 17:32:04 +0200
committerCôme Chilliet <come.chilliet@nextcloud.com>2023-10-19 11:44:01 +0200
commitbd370678210b69eedf4c579033ca2b60b897bd13 (patch)
treecebd90025f20aafc1425d6435afdc2ccfa557276
parent5503c4c8e2647ec43e2eff53438fc80ce92c60f0 (diff)
downloadnextcloud-server-bd370678210b69eedf4c579033ca2b60b897bd13.tar.gz
nextcloud-server-bd370678210b69eedf4c579033ca2b60b897bd13.zip
Migrate InternetConnectivity check to new API
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
-rw-r--r--apps/settings/composer/composer/autoload_classmap.php1
-rw-r--r--apps/settings/composer/composer/autoload_static.php1
-rw-r--r--apps/settings/lib/AppInfo/Application.php6
-rw-r--r--apps/settings/lib/Controller/CheckSetupController.php49
-rw-r--r--apps/settings/lib/SetupChecks/InternetConnectivity.php100
-rw-r--r--core/js/setupchecks.js6
6 files changed, 106 insertions, 57 deletions
diff --git a/apps/settings/composer/composer/autoload_classmap.php b/apps/settings/composer/composer/autoload_classmap.php
index 5ae86072171..d07cbebfb83 100644
--- a/apps/settings/composer/composer/autoload_classmap.php
+++ b/apps/settings/composer/composer/autoload_classmap.php
@@ -75,6 +75,7 @@ return array(
'OCA\\Settings\\Settings\\Personal\\ServerDevNotice' => $baseDir . '/../lib/Settings/Personal/ServerDevNotice.php',
'OCA\\Settings\\SetupChecks\\CheckUserCertificates' => $baseDir . '/../lib/SetupChecks/CheckUserCertificates.php',
'OCA\\Settings\\SetupChecks\\DefaultPhoneRegionSet' => $baseDir . '/../lib/SetupChecks/DefaultPhoneRegionSet.php',
+ 'OCA\\Settings\\SetupChecks\\InternetConnectivity' => $baseDir . '/../lib/SetupChecks/InternetConnectivity.php',
'OCA\\Settings\\SetupChecks\\LegacySSEKeyFormat' => $baseDir . '/../lib/SetupChecks/LegacySSEKeyFormat.php',
'OCA\\Settings\\SetupChecks\\NeedsSystemAddressBookSync' => $baseDir . '/../lib/SetupChecks/NeedsSystemAddressBookSync.php',
'OCA\\Settings\\SetupChecks\\PhpDefaultCharset' => $baseDir . '/../lib/SetupChecks/PhpDefaultCharset.php',
diff --git a/apps/settings/composer/composer/autoload_static.php b/apps/settings/composer/composer/autoload_static.php
index 34f8b0de7b0..debf3f2966a 100644
--- a/apps/settings/composer/composer/autoload_static.php
+++ b/apps/settings/composer/composer/autoload_static.php
@@ -90,6 +90,7 @@ class ComposerStaticInitSettings
'OCA\\Settings\\Settings\\Personal\\ServerDevNotice' => __DIR__ . '/..' . '/../lib/Settings/Personal/ServerDevNotice.php',
'OCA\\Settings\\SetupChecks\\CheckUserCertificates' => __DIR__ . '/..' . '/../lib/SetupChecks/CheckUserCertificates.php',
'OCA\\Settings\\SetupChecks\\DefaultPhoneRegionSet' => __DIR__ . '/..' . '/../lib/SetupChecks/DefaultPhoneRegionSet.php',
+ 'OCA\\Settings\\SetupChecks\\InternetConnectivity' => __DIR__ . '/..' . '/../lib/SetupChecks/InternetConnectivity.php',
'OCA\\Settings\\SetupChecks\\LegacySSEKeyFormat' => __DIR__ . '/..' . '/../lib/SetupChecks/LegacySSEKeyFormat.php',
'OCA\\Settings\\SetupChecks\\NeedsSystemAddressBookSync' => __DIR__ . '/..' . '/../lib/SetupChecks/NeedsSystemAddressBookSync.php',
'OCA\\Settings\\SetupChecks\\PhpDefaultCharset' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpDefaultCharset.php',
diff --git a/apps/settings/lib/AppInfo/Application.php b/apps/settings/lib/AppInfo/Application.php
index 578ec0a01b6..e6106cb9b1e 100644
--- a/apps/settings/lib/AppInfo/Application.php
+++ b/apps/settings/lib/AppInfo/Application.php
@@ -50,6 +50,7 @@ use OCA\Settings\Search\SectionSearch;
use OCA\Settings\Search\UserSearch;
use OCA\Settings\SetupChecks\CheckUserCertificates;
use OCA\Settings\SetupChecks\DefaultPhoneRegionSet;
+use OCA\Settings\SetupChecks\InternetConnectivity;
use OCA\Settings\SetupChecks\LegacySSEKeyFormat;
use OCA\Settings\SetupChecks\PhpDefaultCharset;
use OCA\Settings\SetupChecks\PhpOutdated;
@@ -146,13 +147,14 @@ class Application extends App implements IBootstrap {
);
});
$context->registerSetupCheck(CheckUserCertificates::class);
+ $context->registerSetupCheck(DefaultPhoneRegionSet::class);
+ $context->registerSetupCheck(InternetConnectivity::class);
$context->registerSetupCheck(LegacySSEKeyFormat::class);
$context->registerSetupCheck(PhpDefaultCharset::class);
$context->registerSetupCheck(PhpOutdated::class);
$context->registerSetupCheck(PhpOutputBuffering::class);
- $context->registerSetupCheck(SupportedDatabase::class);
- $context->registerSetupCheck(DefaultPhoneRegionSet::class);
$context->registerSetupCheck(ReadOnlyConfig::class);
+ $context->registerSetupCheck(SupportedDatabase::class);
$context->registerUserMigrator(AccountMigrator::class);
}
diff --git a/apps/settings/lib/Controller/CheckSetupController.php b/apps/settings/lib/Controller/CheckSetupController.php
index 1028d8ca202..9f2ba0e5bf6 100644
--- a/apps/settings/lib/Controller/CheckSetupController.php
+++ b/apps/settings/lib/Controller/CheckSetupController.php
@@ -193,54 +193,6 @@ class CheckSetupController extends Controller {
}
/**
- * Checks if the server can connect to the internet using HTTPS and HTTP
- * @return bool
- */
- private function hasInternetConnectivityProblems(): bool {
- if ($this->config->getSystemValue('has_internet_connection', true) === false) {
- return false;
- }
-
- $siteArray = $this->config->getSystemValue('connectivity_check_domains', [
- 'www.nextcloud.com', 'www.startpage.com', 'www.eff.org', 'www.edri.org'
- ]);
-
- foreach ($siteArray as $site) {
- if ($this->isSiteReachable($site)) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Checks if the Nextcloud server can connect to a specific URL
- * @param string $site site domain or full URL with http/https protocol
- * @return bool
- */
- private function isSiteReachable(string $site): bool {
- try {
- $client = $this->clientService->newClient();
- // if there is no protocol, test http:// AND https://
- if (preg_match('/^https?:\/\//', $site) !== 1) {
- $httpSite = 'http://' . $site . '/';
- $client->get($httpSite);
- $httpsSite = 'https://' . $site . '/';
- $client->get($httpsSite);
- } else {
- $client->get($site);
- }
- } catch (\Exception $e) {
- $this->logger->error('Cannot connect to: ' . $site, [
- 'app' => 'internet_connection_check',
- 'exception' => $e,
- ]);
- return false;
- }
- return true;
- }
-
- /**
* Checks whether a local memcache is installed or not
* @return bool
*/
@@ -906,7 +858,6 @@ Raw output
'isFairUseOfFreePushService' => $this->isFairUseOfFreePushService(),
'isBruteforceThrottled' => $this->throttler->getAttempts($this->request->getRemoteAddress()) !== 0,
'bruteforceRemoteAddress' => $this->request->getRemoteAddress(),
- 'serverHasInternetConnectionProblems' => $this->hasInternetConnectivityProblems(),
'isMemcacheConfigured' => $this->isMemcacheConfigured(),
'memcacheDocs' => $this->urlGenerator->linkToDocs('admin-performance'),
'isRandomnessSecure' => $this->isRandomnessSecure(),
diff --git a/apps/settings/lib/SetupChecks/InternetConnectivity.php b/apps/settings/lib/SetupChecks/InternetConnectivity.php
new file mode 100644
index 00000000000..697dddc935a
--- /dev/null
+++ b/apps/settings/lib/SetupChecks/InternetConnectivity.php
@@ -0,0 +1,100 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2023 Côme Chilliet <come.chilliet@nextcloud.com>
+ *
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @author Côme Chilliet <come.chilliet@nextcloud.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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/>.
+ *
+ */
+namespace OCA\Settings\SetupChecks;
+
+use OCP\Http\Client\IClientService;
+use OCP\IConfig;
+use OCP\IL10N;
+use OCP\SetupCheck\ISetupCheck;
+use OCP\SetupCheck\SetupResult;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Checks if the server can connect to the internet using HTTPS and HTTP
+ */
+class InternetConnectivity implements ISetupCheck {
+ public function __construct(
+ private IL10N $l10n,
+ private IConfig $config,
+ private IClientService $clientService,
+ private LoggerInterface $logger,
+ ) {
+ }
+
+ public function getCategory(): string {
+ return 'network';
+ }
+
+ public function getName(): string {
+ return $this->l10n->t('Internet connectivity');
+ }
+
+ public function run(): SetupResult {
+ if ($this->config->getSystemValue('has_internet_connection', true) === false) {
+ return new SetupResult(SetupResult::SUCCESS, $this->l10n->t('Internet connectivity is disabled in configuration file.'));
+ }
+
+ $siteArray = $this->config->getSystemValue('connectivity_check_domains', [
+ 'www.nextcloud.com', 'www.startpage.com', 'www.eff.org', 'www.edri.org'
+ ]);
+
+ foreach ($siteArray as $site) {
+ if ($this->isSiteReachable($site)) {
+ return new SetupResult(SetupResult::SUCCESS);
+ }
+ }
+ return new SetupResult(SetupResult::WARNING, $this->l10n->t('This server has no working internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. Establish a connection from this server to the internet to enjoy all features.'));
+ }
+
+ /**
+ * Checks if the Nextcloud server can connect to a specific URL
+ * @param string $site site domain or full URL with http/https protocol
+ */
+ private function isSiteReachable(string $site): bool {
+ try {
+ $client = $this->clientService->newClient();
+ // if there is no protocol, test http:// AND https://
+ if (preg_match('/^https?:\/\//', $site) !== 1) {
+ $httpSite = 'http://' . $site . '/';
+ $client->get($httpSite);
+ $httpsSite = 'https://' . $site . '/';
+ $client->get($httpsSite);
+ } else {
+ $client->get($site);
+ }
+ } catch (\Exception $e) {
+ $this->logger->error('Cannot connect to: ' . $site, [
+ 'app' => 'internet_connection_check',
+ 'exception' => $e,
+ ]);
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js
index fe67f1ca451..a2bddefbe69 100644
--- a/core/js/setupchecks.js
+++ b/core/js/setupchecks.js
@@ -275,12 +275,6 @@
type: OC.SetupChecks.MESSAGE_TYPE_ERROR
});
}
- if (data.serverHasInternetConnectionProblems) {
- messages.push({
- msg: t('core', 'This server has no working internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. Establish a connection from this server to the internet to enjoy all features.'),
- type: OC.SetupChecks.MESSAGE_TYPE_WARNING
- });
- }
if(!data.isMemcacheConfigured) {
messages.push({
msg: t('core', 'No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the {linkstart}documentation ↗{linkend}.')