7 changed files with 171 additions and 35 deletions
-
15apps/federation/appinfo/application.php
-
23apps/federation/appinfo/install.php
-
7apps/federation/appinfo/register_command.php
-
23apps/federation/appinfo/update.php
-
40apps/federation/command/syncfederationaddressbooks.php
-
55apps/federation/lib/syncfederationaddressbooks.php
-
43apps/federation/lib/syncjob.php
@ -0,0 +1,23 @@ |
|||
<?php |
|||
/** |
|||
* @author Thomas Müller <thomas.mueller@tmit.eu> |
|||
* |
|||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* 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, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
|
|||
$app = new \OCA\Federation\AppInfo\Application(); |
|||
$app->setupCron(); |
|||
@ -1,8 +1,7 @@ |
|||
<?php |
|||
|
|||
$dbConnection = \OC::$server->getDatabaseConnection(); |
|||
$l10n = \OC::$server->getL10N('federation'); |
|||
$dbHandler = new \OCA\Federation\DbHandler($dbConnection, $l10n); |
|||
$app = new \OCA\Federation\AppInfo\Application(); |
|||
$syncService = $app->getSyncService(); |
|||
|
|||
/** @var Symfony\Component\Console\Application $application */ |
|||
$application->add(new \OCA\Federation\Command\SyncFederationAddressBooks($dbHandler)); |
|||
$application->add(new \OCA\Federation\Command\SyncFederationAddressBooks($syncService)); |
|||
@ -0,0 +1,23 @@ |
|||
<?php |
|||
/** |
|||
* @author Thomas Müller <thomas.mueller@tmit.eu> |
|||
* |
|||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* 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, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
|
|||
$app = new \OCA\Federation\AppInfo\Application(); |
|||
$app->setupCron(); |
|||
@ -0,0 +1,55 @@ |
|||
<?php |
|||
|
|||
namespace OCA\Federation; |
|||
|
|||
use OCA\DAV\CardDAV\SyncService; |
|||
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 { |
|||
|
|||
/** @var DbHandler */ |
|||
protected $dbHandler; |
|||
|
|||
/** @var SyncService */ |
|||
private $syncService; |
|||
|
|||
/** |
|||
* @param DbHandler $dbHandler |
|||
*/ |
|||
function __construct(DbHandler $dbHandler) { |
|||
|
|||
$this->syncService = \OC::$server->query('CardDAVSyncService'); |
|||
$this->dbHandler = $dbHandler; |
|||
} |
|||
|
|||
public function syncThemAll(\Closure $callback) { |
|||
|
|||
$trustedServers = $this->dbHandler->getAllServer(); |
|||
foreach ($trustedServers as $trustedServer) { |
|||
$url = $trustedServer['url']; |
|||
$callback($url); |
|||
$sharedSecret = $trustedServer['shared_secret']; |
|||
$syncToken = $trustedServer['sync_token']; |
|||
|
|||
if (is_null($sharedSecret)) { |
|||
continue; |
|||
} |
|||
$targetBookId = sha1($url); |
|||
$targetPrincipal = "principals/system/system"; |
|||
$targetBookProperties = [ |
|||
'{DAV:}displayname' => $url |
|||
]; |
|||
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) { |
|||
$callback($url, $ex); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
<?php |
|||
/** |
|||
* @author Thomas Müller <thomas.mueller@tmit.eu> |
|||
* |
|||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* 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, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
|
|||
namespace OCA\Federation; |
|||
|
|||
use OC\BackgroundJob\TimedJob; |
|||
use OCA\Federation\AppInfo\Application; |
|||
|
|||
class SyncJob extends TimedJob { |
|||
|
|||
public function __construct() { |
|||
// Run once a day
|
|||
$this->setInterval(24 * 60 * 60); |
|||
} |
|||
|
|||
protected function run($argument) { |
|||
$app = new Application(); |
|||
$ss = $app->getSyncService(); |
|||
$ss->syncThemAll(function($url, $ex) { |
|||
if ($ex instanceof \Exception) { |
|||
\OC::$server->getLogger()->error("Error while syncing $url : " . $ex->getMessage(), ['app' => 'fed-sync']); |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue