diff options
author | Anna <anna@nextcloud.com> | 2024-08-22 17:01:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-22 17:01:28 +0200 |
commit | 1b39abb5014f70c60aeed93ee726491d05380122 (patch) | |
tree | ad468d494db3399961d1abce00a0a2e5a93383ce | |
parent | 4eebf471e570c29156e6ebacc82aa8bedbdd8a98 (diff) | |
parent | 3c3667fe18c3263f6e51ebeefdf5b1086e11f23a (diff) | |
download | nextcloud-server-1b39abb5014f70c60aeed93ee726491d05380122.tar.gz nextcloud-server-1b39abb5014f70c60aeed93ee726491d05380122.zip |
Merge pull request #47415 from nextcloud/Fix/trusted-server-icon-recovery-without-addressbook-change
fix: Trusted server icon recovery without addressbook change
4 files changed, 37 insertions, 0 deletions
diff --git a/apps/federation/lib/BackgroundJob/GetSharedSecret.php b/apps/federation/lib/BackgroundJob/GetSharedSecret.php index f07e0d8c2a7..1a23d58a7d1 100644 --- a/apps/federation/lib/BackgroundJob/GetSharedSecret.php +++ b/apps/federation/lib/BackgroundJob/GetSharedSecret.php @@ -90,6 +90,7 @@ class GetSharedSecret extends Job { // kill job after 30 days of trying $deadline = $currentTime - $this->maxLifespan; if ($created < $deadline) { + $this->logger->warning("The job to get the shared secret job is too old and gets stopped now without retention. Setting server status of '{$target}' to failure."); $this->retainJob = false; $this->trustedServers->setServerStatus($target, TrustedServers::STATUS_FAILURE); return; diff --git a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php index 07243f5c94d..a1d0d2b0df0 100644 --- a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php +++ b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php @@ -93,6 +93,7 @@ class RequestSharedSecret extends Job { // kill job after 30 days of trying $deadline = $currentTime - $this->maxLifespan; if ($created < $deadline) { + $this->logger->warning("The job to request the shared secret job is too old and gets stopped now without retention. Setting server status of '{$target}' to failure."); $this->retainJob = false; $this->trustedServers->setServerStatus($target, TrustedServers::STATUS_FAILURE); return; diff --git a/apps/federation/lib/SyncFederationAddressBooks.php b/apps/federation/lib/SyncFederationAddressBooks.php index 46a6a8c40a5..1b47c92db1a 100644 --- a/apps/federation/lib/SyncFederationAddressBooks.php +++ b/apps/federation/lib/SyncFederationAddressBooks.php @@ -60,6 +60,10 @@ class SyncFederationAddressBooks { $this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK, $newToken); } else { $this->logger->debug("Sync Token for $url unchanged from previous sync"); + // The server status might have been changed to a failure status in previous runs. + if ($this->dbHandler->getServerStatus($url) !== TrustedServers::STATUS_OK) { + $this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK); + } } } catch (\Exception $ex) { if ($ex->getCode() === Http::STATUS_UNAUTHORIZED) { diff --git a/apps/federation/tests/SyncFederationAddressbooksTest.php b/apps/federation/tests/SyncFederationAddressbooksTest.php index 1ebca2f6a0f..1b53f238bfa 100644 --- a/apps/federation/tests/SyncFederationAddressbooksTest.php +++ b/apps/federation/tests/SyncFederationAddressbooksTest.php @@ -90,4 +90,35 @@ class SyncFederationAddressbooksTest extends \Test\TestCase { }); $this->assertEquals(2, count($this->callBacks)); } + + public function testSuccessfulSyncWithoutChangesAfterFailure() { + /** @var DbHandler | MockObject $dbHandler */ + $dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler') + ->disableOriginalConstructor() + ->getMock(); + $dbHandler->method('getAllServer') + ->willReturn([ + [ + 'url' => 'https://cloud.drop.box', + 'url_hash' => 'sha1', + 'shared_secret' => 'ilovenextcloud', + 'sync_token' => '0' + ] + ]); + $dbHandler->method('getServerStatus')->willReturn(\OCA\Federation\TrustedServers::STATUS_FAILURE); + $dbHandler->expects($this->once())->method('setServerStatus')-> + with('https://cloud.drop.box', 1); + $syncService = $this->getMockBuilder('OCA\DAV\CardDAV\SyncService') + ->disableOriginalConstructor() + ->getMock(); + $syncService->expects($this->once())->method('syncRemoteAddressBook') + ->willReturn('0'); + + /** @var \OCA\DAV\CardDAV\SyncService $syncService */ + $s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService, $this->logger); + $s->syncThemAll(function ($url, $ex) { + $this->callBacks[] = [$url, $ex]; + }); + $this->assertEquals('1', count($this->callBacks)); + } } |