Skip to content

Commit

Permalink
Add logging to federation
Browse files Browse the repository at this point in the history
Signed-off-by: Anna Larch <anna@nextcloud.com>
  • Loading branch information
miaulalala authored and PVince81 committed Jul 27, 2022
1 parent d24823b commit 2988efe
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 8 deletions.
4 changes: 3 additions & 1 deletion apps/dav/lib/CardDAV/SyncService.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,11 @@ public function syncRemoteAddressBook(string $url, string $userName, string $add
if ($ex->getCode() === Http::STATUS_UNAUTHORIZED) {
// remote server revoked access to the address book, remove it
$this->backend->deleteAddressBook($addressBookId);
$this->logger->info('Authorization failed, remove address book: ' . $url, ['app' => 'dav']);
$this->logger->error('Authorization failed, remove address book: ' . $url, ['app' => 'dav']);
throw $ex;
}
$this->logger->error('Client exception:', ['app' => 'dav', 'exception' => $ex]);
throw $ex;
}

// 3. apply changes
Expand Down
13 changes: 12 additions & 1 deletion apps/federation/lib/SyncFederationAddressBooks.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,23 @@
use OCA\DAV\CardDAV\SyncService;
use OCP\AppFramework\Http;
use OCP\OCS\IDiscoveryService;
use Psr\Log\LoggerInterface;

class SyncFederationAddressBooks {
protected DbHandler $dbHandler;
private SyncService $syncService;
private DiscoveryService $ocsDiscoveryService;
private LoggerInterface $logger;

public function __construct(DbHandler $dbHandler,
SyncService $syncService,
IDiscoveryService $ocsDiscoveryService
IDiscoveryService $ocsDiscoveryService,
LoggerInterface $logger
) {
$this->syncService = $syncService;
$this->dbHandler = $dbHandler;
$this->ocsDiscoveryService = $ocsDiscoveryService;
$this->logger = $logger;
}

/**
Expand All @@ -60,6 +64,7 @@ public function syncThemAll(\Closure $callback) {
$addressBookUrl = isset($endPoints['system-address-book']) ? trim($endPoints['system-address-book'], '/') : 'remote.php/dav/addressbooks/system/system/system';

if (is_null($sharedSecret)) {
$this->logger->debug("Shared secret for $url is null");
continue;
}
$targetBookId = $trustedServer['url_hash'];
Expand All @@ -71,10 +76,16 @@ public function syncThemAll(\Closure $callback) {
$newToken = $this->syncService->syncRemoteAddressBook($url, $cardDavUser, $addressBookUrl, $sharedSecret, $syncToken, $targetBookId, $targetPrincipal, $targetBookProperties);
if ($newToken !== $syncToken) {
$this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK, $newToken);
} else {
$this->logger->debug("Sync Token for $url unchanged from previous sync");
}
} catch (\Exception $ex) {
if ($ex->getCode() === Http::STATUS_UNAUTHORIZED) {
$this->dbHandler->setServerStatus($url, TrustedServers::STATUS_ACCESS_REVOKED);
$this->logger->error("Server sync for $url failed because of revoked access.");
} else {
$this->dbHandler->setServerStatus($url, TrustedServers::STATUS_FAILURE);
$this->logger->error("Server sync for $url failed.");
}
$callback($url, $ex);
}
Expand Down
2 changes: 1 addition & 1 deletion apps/federation/lib/SyncJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public function __construct(SyncFederationAddressBooks $syncService, LoggerInter
protected function run($argument) {
$this->syncService->syncThemAll(function ($url, $ex) {
if ($ex instanceof \Exception) {
$this->logger->info("Error while syncing $url.", [
$this->logger->error("Error while syncing $url.", [
'app' => 'fed-sync',
'exception' => $ex,
]);
Expand Down
16 changes: 11 additions & 5 deletions apps/federation/tests/SyncFederationAddressbooksTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,34 @@
*/
namespace OCA\Federation\Tests;

use Psr\Log\LoggerInterface;
use OC\OCS\DiscoveryService;
use OCA\Federation\DbHandler;
use OCA\Federation\SyncFederationAddressBooks;
use PHPUnit\Framework\MockObject\MockObject;

class SyncFederationAddressbooksTest extends \Test\TestCase {

/** @var array */
private $callBacks = [];

/** @var \PHPUnit\Framework\MockObject\MockObject | DiscoveryService */
/** @var MockObject | DiscoveryService */
private $discoveryService;

/** @var MockObject|LoggerInterface */
private $logger;

protected function setUp(): void {
parent::setUp();

$this->discoveryService = $this->getMockBuilder(DiscoveryService::class)
->disableOriginalConstructor()->getMock();
$this->discoveryService->expects($this->any())->method('discover')->willReturn([]);
$this->logger = $this->createMock(LoggerInterface::class);
}

public function testSync() {
/** @var DbHandler | \PHPUnit\Framework\MockObject\MockObject $dbHandler */
/** @var DbHandler | MockObject $dbHandler */
$dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler')
->disableOriginalConstructor()
->getMock();
Expand All @@ -71,15 +77,15 @@ public function testSync() {
->willReturn('1');

/** @var \OCA\DAV\CardDAV\SyncService $syncService */
$s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService);
$s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService, $this->logger);
$s->syncThemAll(function ($url, $ex) {
$this->callBacks[] = [$url, $ex];
});
$this->assertEquals('1', count($this->callBacks));
}

public function testException() {
/** @var DbHandler | \PHPUnit\Framework\MockObject\MockObject $dbHandler */
/** @var DbHandler | MockObject $dbHandler */
$dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler')->
disableOriginalConstructor()->
getMock();
Expand All @@ -99,7 +105,7 @@ public function testException() {
->willThrowException(new \Exception('something did not work out'));

/** @var \OCA\DAV\CardDAV\SyncService $syncService */
$s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService);
$s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService, $this->logger);
$s->syncThemAll(function ($url, $ex) {
$this->callBacks[] = [$url, $ex];
});
Expand Down

0 comments on commit 2988efe

Please sign in to comment.