2015-12-04 15:38:32 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace OCA\Federation\Command;
|
|
|
|
|
|
|
|
use OCA\DAV\CardDAV\SyncService;
|
|
|
|
use OCA\Federation\DbHandler;
|
|
|
|
use OCA\Federation\TrustedServers;
|
|
|
|
use Symfony\Component\Console\Command\Command;
|
|
|
|
use Symfony\Component\Console\Helper\ProgressBar;
|
|
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
|
|
|
|
|
|
class SyncFederationAddressBooks extends Command {
|
|
|
|
|
2015-12-17 19:01:24 +03:00
|
|
|
/** @var DbHandler */
|
|
|
|
protected $dbHandler;
|
2015-12-04 15:38:32 +03:00
|
|
|
|
|
|
|
/** @var SyncService */
|
|
|
|
private $syncService;
|
|
|
|
|
|
|
|
/**
|
2016-01-11 18:44:44 +03:00
|
|
|
* @param DbHandler $dbHandler
|
2015-12-04 15:38:32 +03:00
|
|
|
*/
|
2015-12-17 19:01:24 +03:00
|
|
|
function __construct(DbHandler $dbHandler) {
|
2015-12-04 15:38:32 +03:00
|
|
|
parent::__construct();
|
|
|
|
|
|
|
|
$this->syncService = \OC::$server->query('CardDAVSyncService');
|
2015-12-17 19:01:24 +03:00
|
|
|
$this->dbHandler = $dbHandler;
|
2015-12-04 15:38:32 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
protected function configure() {
|
|
|
|
$this
|
|
|
|
->setName('federation:sync-addressbooks')
|
|
|
|
->setDescription('Synchronizes addressbooks of all federated clouds');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param InputInterface $input
|
|
|
|
* @param OutputInterface $output
|
|
|
|
*/
|
|
|
|
protected function execute(InputInterface $input, OutputInterface $output) {
|
|
|
|
|
|
|
|
$progress = new ProgressBar($output);
|
|
|
|
$progress->start();
|
2015-12-17 19:01:24 +03:00
|
|
|
$trustedServers = $this->dbHandler->getAllServer();
|
2015-12-04 15:38:32 +03:00
|
|
|
foreach ($trustedServers as $trustedServer) {
|
|
|
|
$progress->advance();
|
|
|
|
$url = $trustedServer['url'];
|
|
|
|
$sharedSecret = $trustedServer['shared_secret'];
|
|
|
|
$syncToken = $trustedServer['sync_token'];
|
|
|
|
|
|
|
|
if (is_null($sharedSecret)) {
|
|
|
|
continue;
|
|
|
|
}
|
2015-12-17 13:23:22 +03:00
|
|
|
$targetBookId = sha1($url);
|
2015-12-04 15:38:32 +03:00
|
|
|
$targetPrincipal = "principals/system/system";
|
|
|
|
$targetBookProperties = [
|
|
|
|
'{DAV:}displayname' => $url
|
|
|
|
];
|
2015-12-21 19:32:39 +03:00
|
|
|
try {
|
|
|
|
$newToken = $this->syncService->syncRemoteAddressBook($url, 'system', $sharedSecret, $syncToken, $targetPrincipal, $targetBookId, $targetBookProperties);
|
|
|
|
if ($newToken !== $syncToken) {
|
|
|
|
$this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK, $newToken);
|
|
|
|
}
|
|
|
|
} catch (\Exception $ex) {
|
|
|
|
$output->writeln("Error while syncing $url : " . $ex->getMessage());
|
2015-12-04 15:38:32 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
$progress->finish();
|
|
|
|
$output->writeln('');
|
|
|
|
}
|
|
|
|
}
|