@@ -23,3 +23,4 @@ namespace OCA\Federation\AppInfo; | |||
$app = new Application(); | |||
$app->registerSettings(); | |||
$app->registerHooks(); |
@@ -25,11 +25,13 @@ use OCA\Federation\API\OCSAuthAPI; | |||
use OCA\Federation\Controller\AuthController; | |||
use OCA\Federation\Controller\SettingsController; | |||
use OCA\Federation\DbHandler; | |||
use OCA\Federation\Hooks; | |||
use OCA\Federation\Middleware\AddServerMiddleware; | |||
use OCA\Federation\TrustedServers; | |||
use OCP\API; | |||
use OCP\App; | |||
use OCP\AppFramework\IAppContainer; | |||
use OCP\Util; | |||
class Application extends \OCP\AppFramework\App { | |||
@@ -127,4 +129,21 @@ class Application extends \OCP\AppFramework\App { | |||
} | |||
/** | |||
* listen to federated_share_added hooks to auto-add new servers to the | |||
* list of trusted servers. | |||
*/ | |||
public function registerHooks() { | |||
$container = $this->getContainer(); | |||
$hooksManager = new Hooks($container->query('TrustedServers')); | |||
Util::connectHook( | |||
'OCP\Share', | |||
'federated_share_added', | |||
$hooksManager, | |||
'addServerHook' | |||
); | |||
} | |||
} |
@@ -0,0 +1,50 @@ | |||
<?php | |||
/** | |||
* @author Björn Schießle <schiessle@owncloud.com> | |||
* | |||
* @copyright Copyright (c) 2015, 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; | |||
class Hooks { | |||
/** @var TrustedServers */ | |||
private $trustedServers; | |||
public function __construct(TrustedServers $trustedServers) { | |||
$this->trustedServers = $trustedServers; | |||
} | |||
/** | |||
* add servers to the list of trusted servers once a federated share was established | |||
* | |||
* @param array $params | |||
*/ | |||
public function addServerHook($params) { | |||
if ( | |||
$this->trustedServers->getAutoAddServers() === true && | |||
$this->trustedServers->isTrustedServer($params['server']) === false | |||
) { | |||
$this->trustedServers->addServer($params['server']); | |||
} | |||
} | |||
} |
@@ -0,0 +1,79 @@ | |||
<?php | |||
/** | |||
* @author Björn Schießle <schiessle@owncloud.com> | |||
* | |||
* @copyright Copyright (c) 2015, 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\Tests\lib; | |||
use OCA\Federation\Hooks; | |||
use OCA\Federation\TrustedServers; | |||
use Test\TestCase; | |||
class HooksTest extends TestCase { | |||
/** @var \PHPUnit_Framework_MockObject_MockObject | TrustedServers */ | |||
private $trustedServers; | |||
/** @var Hooks */ | |||
private $hooks; | |||
public function setUp() { | |||
parent::setUp(); | |||
$this->trustedServers = $this->getMockBuilder('OCA\Federation\TrustedServers') | |||
->disableOriginalConstructor()->getMock(); | |||
$this->hooks = new Hooks($this->trustedServers); | |||
} | |||
/** | |||
* @dataProvider dataTestAddServerHook | |||
* | |||
* @param bool $autoAddEnabled is auto-add enabled | |||
* @param bool $isTrustedServer is the server already in the list of trusted servers | |||
* @param bool $addServer should the server be added | |||
*/ | |||
public function testAddServerHook($autoAddEnabled, $isTrustedServer, $addServer) { | |||
$this->trustedServers->expects($this->any())->method('getAutoAddServers') | |||
->willReturn($autoAddEnabled); | |||
$this->trustedServers->expects($this->any())->method('isTrustedServer') | |||
->with('url')->willReturn($isTrustedServer); | |||
if ($addServer) { | |||
$this->trustedServers->expects($this->once())->method('addServer') | |||
->with('url'); | |||
} else { | |||
$this->trustedServers->expects($this->never())->method('addServer'); | |||
} | |||
$this->hooks->addServerHook(['server' => 'url']); | |||
} | |||
public function dataTestAddServerHook() { | |||
return [ | |||
[true, true, false], | |||
[false, true, false], | |||
[true, false, true], | |||
[false, false, false], | |||
]; | |||
} | |||
} |
@@ -192,6 +192,8 @@ class Manager { | |||
$acceptShare->execute(array(1, $mountPoint, $hash, $id, $this->uid)); | |||
$this->sendFeedbackToRemote($share['remote'], $share['share_token'], $share['remote_id'], 'accept'); | |||
\OC_Hook::emit('OCP\Share', 'federated_share_added', ['server' => $share['remote']]); | |||
//FIXME $this->scrapNotification($share['remote_id']); | |||
return true; | |||
} |
@@ -2566,7 +2566,10 @@ class Share extends Constants { | |||
$result = self::tryHttpPost($url, $fields); | |||
$status = json_decode($result['result'], true); | |||
return ($result['success'] && $status['ocs']['meta']['statuscode'] === 100); | |||
if ($result['success'] && $status['ocs']['meta']['statuscode'] === 100) { | |||
\OC_Hook::emit('OCP\Share', 'federated_share_added', ['server' => $remote]); | |||
return true; | |||
} | |||
} | |||