Browse Source

use hooks to auto add server to the list of trusted servers once a federated share was created

tags/v9.0beta1
Björn Schießle 8 years ago
parent
commit
964fa1fce3

+ 1
- 0
apps/federation/appinfo/app.php View File

@@ -23,3 +23,4 @@ namespace OCA\Federation\AppInfo;

$app = new Application();
$app->registerSettings();
$app->registerHooks();

+ 19
- 0
apps/federation/appinfo/application.php View File

@@ -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'
);
}

}

+ 50
- 0
apps/federation/lib/hooks.php View File

@@ -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']);
}
}

}

+ 79
- 0
apps/federation/tests/lib/hookstest.php View File

@@ -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],
];
}
}

+ 2
- 0
apps/files_sharing/lib/external/manager.php View File

@@ -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;
}

+ 4
- 1
lib/private/share/share.php View File

@@ -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;
}

}


Loading…
Cancel
Save