summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2025-03-10 16:24:26 +0100
committerFerdinand Thiessen <opensource@fthiessen.de>2025-03-11 21:58:09 +0100
commit92c48d0394d2f733398d73db9017b715e00cf998 (patch)
tree313593dbf2fa76006404c8d896d372669419dc94
parente674631f9b310e9b3a39ed4979b93c2d545b6348 (diff)
downloadnextcloud-server-92c48d0394d2f733398d73db9017b715e00cf998.tar.gz
nextcloud-server-92c48d0394d2f733398d73db9017b715e00cf998.zip
fix(lookup-server): disable lookup server for non-global scale setups
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
-rw-r--r--apps/federatedfilesharing/lib/FederatedShareProvider.php12
-rw-r--r--apps/federatedfilesharing/src/components/AdminSettings.vue26
-rw-r--r--apps/federatedfilesharing/tests/FederatedShareProviderTest.php14
-rw-r--r--apps/files_sharing/lib/Controller/ShareesAPIController.php10
-rw-r--r--apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php13
-rw-r--r--apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php12
-rw-r--r--apps/lookup_server_connector/lib/UpdateLookupServer.php7
-rw-r--r--apps/settings/lib/BackgroundJobs/VerifyUserData.php8
-rw-r--r--build/psalm-baseline.xml5
-rw-r--r--lib/private/Collaboration/Collaborators/LookupPlugin.php6
-rw-r--r--tests/lib/Collaboration/Collaborators/LookupPluginTest.php28
11 files changed, 79 insertions, 62 deletions
diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php
index 6ffd71020fa..b35bdd90ed3 100644
--- a/apps/federatedfilesharing/lib/FederatedShareProvider.php
+++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php
@@ -1039,8 +1039,10 @@ class FederatedShareProvider implements IShareProvider {
if ($this->gsConfig->isGlobalScaleEnabled()) {
return true;
}
- $result = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no');
- return $result === 'yes';
+ $result = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no') === 'yes';
+ // TODO: Reenable if lookup server is used again
+ // return $result;
+ return false;
}
@@ -1054,8 +1056,10 @@ class FederatedShareProvider implements IShareProvider {
if ($this->gsConfig->isGlobalScaleEnabled()) {
return false;
}
- $result = $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no');
- return $result === 'yes';
+ $result = $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') === 'yes';
+ // TODO: Reenable if lookup server is used again
+ // return $result;
+ return false;
}
/**
diff --git a/apps/federatedfilesharing/src/components/AdminSettings.vue b/apps/federatedfilesharing/src/components/AdminSettings.vue
index f9de2e0858c..881795a1e97 100644
--- a/apps/federatedfilesharing/src/components/AdminSettings.vue
+++ b/apps/federatedfilesharing/src/components/AdminSettings.vue
@@ -50,17 +50,23 @@
{{ t('federatedfilesharing', 'Allow people on this server to receive group shares from other servers') }}
</NcCheckboxRadioSwitch>
- <NcCheckboxRadioSwitch type="switch"
- :checked.sync="lookupServerEnabled"
- @update:checked="update('lookupServerEnabled', lookupServerEnabled)">
- {{ t('federatedfilesharing', 'Search global and public address book for people') }}
- </NcCheckboxRadioSwitch>
+ <fieldset>
+ <legend>{{ t('federatedfilesharing', 'The lookup server is only available for global scale.') }}</legend>
- <NcCheckboxRadioSwitch type="switch"
- :checked.sync="lookupServerUploadEnabled"
- @update:checked="update('lookupServerUploadEnabled', lookupServerUploadEnabled)">
- {{ t('federatedfilesharing', 'Allow people to publish their data to a global and public address book') }}
- </NcCheckboxRadioSwitch>
+ <NcCheckboxRadioSwitch type="switch"
+ :checked.sync="lookupServerEnabled"
+ disabled
+ @update:checked="update('lookupServerEnabled', lookupServerEnabled)">
+ {{ t('federatedfilesharing', 'Search global and public address book for people') }}
+ </NcCheckboxRadioSwitch>
+
+ <NcCheckboxRadioSwitch type="switch"
+ :checked.sync="lookupServerUploadEnabled"
+ disabled
+ @update:checked="update('lookupServerUploadEnabled', lookupServerUploadEnabled)">
+ {{ t('federatedfilesharing', 'Allow people to publish their data to a global and public address book') }}
+ </NcCheckboxRadioSwitch>
+ </fieldset>
</NcSettingsSection>
</template>
diff --git a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
index a9b56d0ee76..f6d685b1402 100644
--- a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
+++ b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
@@ -859,10 +859,13 @@ class FederatedShareProviderTest extends \Test\TestCase {
public function dataTestIsLookupServerQueriesEnabled() {
return [
- [false, 'yes', true],
- [false, 'no', false],
[true, 'yes', true],
[true, 'no', true],
+ // TODO: reenable if we use the lookup server for non-global scale
+ // [false, 'yes', true],
+ // [false, 'no', false],
+ [false, 'no', false],
+ [false, 'yes', false],
];
}
@@ -886,10 +889,13 @@ class FederatedShareProviderTest extends \Test\TestCase {
public function dataTestIsLookupServerUploadEnabled() {
return [
- [false, 'yes', true],
- [false, 'no', false],
[true, 'yes', false],
[true, 'no', false],
+ // TODO: reenable if we use the lookup server again
+ // [false, 'yes', true],
+ // [false, 'no', false],
+ [false, 'yes', false],
+ [false, 'no', false],
];
}
diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php
index a55720c00b5..73d34e317c6 100644
--- a/apps/files_sharing/lib/Controller/ShareesAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php
@@ -49,6 +49,7 @@ use OCP\Collaboration\Collaborators\ISearch;
use OCP\Collaboration\Collaborators\ISearchResult;
use OCP\Collaboration\Collaborators\SearchResultType;
use OCP\Constants;
+use OCP\GlobalScale\IConfig as GlobalScaleIConfig;
use OCP\IConfig;
use OCP\IRequest;
use OCP\IURLGenerator;
@@ -211,12 +212,11 @@ class ShareesAPIController extends OCSController {
$this->limit = $perPage;
$this->offset = $perPage * ($page - 1);
- // In global scale mode we always search the loogup server
- $lookup = $this->config->getSystemValueBool('gs.enabled', false)
- || $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no') === 'yes';
- $this->result['lookupEnabled'] = $lookup;
+ // In global scale mode we always search the lookup server
+ $this->result['lookupEnabled'] = \OCP\Server::get(GlobalScaleIConfig::class)->isGlobalScaleEnabled();
+ // TODO: Reconsider using lookup server for non-global-scale federation
- [$result, $hasMoreResults] = $this->collaboratorSearch->search($search, $shareTypes, $lookup, $this->limit, $this->offset);
+ [$result, $hasMoreResults] = $this->collaboratorSearch->search($search, $shareTypes, $this->result['lookupEnabled'], $this->limit, $this->offset);
// extra treatment for 'exact' subarray, with a single merge expected keys might be lost
if (isset($result['exact'])) {
diff --git a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
index 6c816951da6..a7bd53b23a1 100644
--- a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
@@ -36,6 +36,7 @@ use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSBadRequestException;
use OCP\Collaboration\Collaborators\ISearch;
+use OCP\GlobalScale\IConfig as GlobalScaleIConfig;
use OCP\IConfig;
use OCP\IRequest;
use OCP\IURLGenerator;
@@ -254,14 +255,14 @@ class ShareesAPIControllerTest extends TestCase {
$perPage = $getData['perPage'] ?? 200;
$shareType = $getData['shareType'] ?? null;
+ $globalConfig = $this->createMock(GlobalScaleIConfig::class);
+ $globalConfig->expects(self::once())
+ ->method('isGlobalScaleEnabled')
+ ->willReturn(true);
+ $this->overwriteService(GlobalScaleIConfig::class, $globalConfig);
+
/** @var IConfig|MockObject $config */
$config = $this->createMock(IConfig::class);
- $config->expects($this->exactly(1))
- ->method('getAppValue')
- ->with($this->anything(), $this->anything(), $this->anything())
- ->willReturnMap([
- ['files_sharing', 'lookupServerEnabled', 'no', 'yes'],
- ]);
$this->shareManager->expects($this->once())
->method('allowGroupSharing')
diff --git a/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php
index 9d733d46c4d..7f42a91dc81 100644
--- a/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php
+++ b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php
@@ -114,10 +114,12 @@ class RetryJob extends Job {
* - max retries are reached (set to 5)
*/
protected function shouldRemoveBackgroundJob(): bool {
- return $this->config->getSystemValueBool('has_internet_connection', true) === false ||
- $this->config->getSystemValueString('lookup_server', 'https://lookup.nextcloud.com') === '' ||
- $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') !== 'yes' ||
- $this->retries >= 5;
+ // TODO: Remove global scale condition once lookup server is used for non-global scale federation
+ // return $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') !== 'yes'
+ return !$this->config->getSystemValueBool('gs.enabled', false)
+ || $this->config->getSystemValueBool('has_internet_connection', true) === false
+ || $this->config->getSystemValueString('lookup_server', 'https://lookup.nextcloud.com') === ''
+ || $this->retries >= 5;
}
protected function shouldRun(): bool {
@@ -179,7 +181,7 @@ class RetryJob extends Job {
$user->getUID(),
'lookup_server_connector',
'update_retries',
- $this->retries + 1
+ (string)($this->retries + 1),
);
}
}
diff --git a/apps/lookup_server_connector/lib/UpdateLookupServer.php b/apps/lookup_server_connector/lib/UpdateLookupServer.php
index c9b819db58b..31ecb7d0765 100644
--- a/apps/lookup_server_connector/lib/UpdateLookupServer.php
+++ b/apps/lookup_server_connector/lib/UpdateLookupServer.php
@@ -82,8 +82,9 @@ class UpdateLookupServer {
* @return bool
*/
private function shouldUpdateLookupServer(): bool {
- return $this->config->getSystemValueBool('has_internet_connection', true) === true &&
- $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') === 'yes' &&
- $this->config->getSystemValueString('lookup_server', 'https://lookup.nextcloud.com') !== '';
+ // TODO: Consider reenable for non-global-scale setups by checking "'files_sharing', 'lookupServerUploadEnabled'" instead of "gs.enabled"
+ return $this->config->getSystemValueBool('gs.enabled', false)
+ && $this->config->getSystemValueBool('has_internet_connection', true)
+ && $this->config->getSystemValueString('lookup_server', 'https://lookup.nextcloud.com') !== '';
}
}
diff --git a/apps/settings/lib/BackgroundJobs/VerifyUserData.php b/apps/settings/lib/BackgroundJobs/VerifyUserData.php
index 5e86cb5bfc6..ff70a47a7a5 100644
--- a/apps/settings/lib/BackgroundJobs/VerifyUserData.php
+++ b/apps/settings/lib/BackgroundJobs/VerifyUserData.php
@@ -145,9 +145,11 @@ class VerifyUserData extends Job {
}
protected function verifyViaLookupServer(array $argument, string $dataType): bool {
- if (empty($this->lookupServerUrl) ||
- $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') !== 'yes' ||
- $this->config->getSystemValue('has_internet_connection', true) === false) {
+ // TODO: Consider to enable for non-global-scale setups by checking 'files_sharing', 'lookupServerUploadEnabled'
+ if (!$this->config->getSystemValueBool('gs.enabled', false)
+ || empty($this->lookupServerUrl)
+ || $this->config->getSystemValue('has_internet_connection', true) === false
+ ) {
return true;
}
diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index 6f18d115644..5c2377c58be 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -1046,11 +1046,6 @@
<code><![CDATA[$storage1->instanceOfStorage('\OC\Files\ObjectStore\ObjectStoreStorage')]]></code>
</RedundantCondition>
</file>
- <file src="apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php">
- <InvalidArgument>
- <code><![CDATA[$this->retries + 1]]></code>
- </InvalidArgument>
- </file>
<file src="apps/oauth2/lib/Controller/OauthApiController.php">
<NoInterfaceProperties>
<code><![CDATA[$this->request->server]]></code>
diff --git a/lib/private/Collaboration/Collaborators/LookupPlugin.php b/lib/private/Collaboration/Collaborators/LookupPlugin.php
index 62cd7b9f2c9..bffc064c017 100644
--- a/lib/private/Collaboration/Collaborators/LookupPlugin.php
+++ b/lib/private/Collaboration/Collaborators/LookupPlugin.php
@@ -57,8 +57,10 @@ class LookupPlugin implements ISearchPlugin {
$isLookupServerEnabled = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no') === 'yes';
$hasInternetConnection = $this->config->getSystemValueBool('has_internet_connection', true);
- // if case of Global Scale we always search the lookup server
- if (!$isGlobalScaleEnabled && (!$isLookupServerEnabled || !$hasInternetConnection)) {
+ // If case of Global Scale we always search the lookup server
+ // TODO: Reconsider using the lookup server for non-global scale
+ // if (!$isGlobalScaleEnabled && (!$isLookupServerEnabled || !$hasInternetConnection || $disableLookupServer)) {
+ if (!$isGlobalScaleEnabled) {
return false;
}
diff --git a/tests/lib/Collaboration/Collaborators/LookupPluginTest.php b/tests/lib/Collaboration/Collaborators/LookupPluginTest.php
index b4819532b34..80f58c74f1c 100644
--- a/tests/lib/Collaboration/Collaborators/LookupPluginTest.php
+++ b/tests/lib/Collaboration/Collaborators/LookupPluginTest.php
@@ -97,7 +97,7 @@ class LookupPluginTest extends TestCase {
['gs.enabled', false],
['has_internet_connection', true],
)->willReturnOnConsecutiveCalls(
- false,
+ true,
true,
);
@@ -162,7 +162,7 @@ class LookupPluginTest extends TestCase {
['gs.enabled', false],
['has_internet_connection', true],
)->willReturnOnConsecutiveCalls(
- false,
+ true,
true,
);
@@ -216,7 +216,7 @@ class LookupPluginTest extends TestCase {
->method('getAppValue')
->with('files_sharing', 'lookupServerEnabled', 'no')
->willReturn($LookupEnabled ? 'yes' : 'no');
- if ($GSEnabled || $LookupEnabled) {
+ if ($GSEnabled) {
$searchResult->expects($this->once())
->method('addResultSet')
->with($type, $searchParams['expectedResult'], []);
@@ -274,12 +274,13 @@ class LookupPluginTest extends TestCase {
$this->assertFalse($moreResults);
}
-
- public function testSearchLookupServerDisabled() {
- $this->config->expects($this->once())
- ->method('getAppValue')
- ->with('files_sharing', 'lookupServerEnabled', 'yes')
- ->willReturn('no');
+ public function testSearchGSDisabled(): void {
+ $this->config->expects($this->atLeastOnce())
+ ->method('getSystemValueBool')
+ ->willReturnMap([
+ ['has_internet_connection', true, true],
+ ['gs.enabled', false, false],
+ ]);
/** @var ISearchResult|MockObject $searchResult */
$searchResult = $this->createMock(ISearchResult::class);
@@ -398,7 +399,6 @@ class LookupPluginTest extends TestCase {
'label' => $fedIDs[0],
'value' => [
'shareType' => IShare::TYPE_REMOTE,
- 'globalScale' => false,
'shareWith' => $fedIDs[0]
],
'extra' => ['federationId' => $fedIDs[0]],
@@ -407,7 +407,6 @@ class LookupPluginTest extends TestCase {
'label' => $fedIDs[1],
'value' => [
'shareType' => IShare::TYPE_REMOTE,
- 'globalScale' => false,
'shareWith' => $fedIDs[1]
],
'extra' => ['federationId' => $fedIDs[1]],
@@ -416,7 +415,6 @@ class LookupPluginTest extends TestCase {
'label' => $fedIDs[2],
'value' => [
'shareType' => IShare::TYPE_REMOTE,
- 'globalScale' => false,
'shareWith' => $fedIDs[2]
],
'extra' => ['federationId' => $fedIDs[2]],
@@ -491,7 +489,7 @@ class LookupPluginTest extends TestCase {
'label' => $fedIDs[0],
'value' => [
'shareType' => IShare::TYPE_REMOTE,
- 'globalScale' => false,
+ 'globalScale' => true,
'shareWith' => $fedIDs[0]
],
'extra' => ['federationId' => $fedIDs[0]],
@@ -500,7 +498,7 @@ class LookupPluginTest extends TestCase {
'label' => $fedIDs[1],
'value' => [
'shareType' => IShare::TYPE_REMOTE,
- 'globalScale' => false,
+ 'globalScale' => true,
'shareWith' => $fedIDs[1]
],
'extra' => ['federationId' => $fedIDs[1]],
@@ -509,7 +507,7 @@ class LookupPluginTest extends TestCase {
'label' => $fedIDs[2],
'value' => [
'shareType' => IShare::TYPE_REMOTE,
- 'globalScale' => false,
+ 'globalScale' => true,
'shareWith' => $fedIDs[2]
],
'extra' => ['federationId' => $fedIDs[2]],