Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-11-24 18:19:39 +0300
committerThomas Müller <thomas.mueller@tmit.eu>2015-11-24 18:19:39 +0300
commit4bb346a1e6fe2407dd96d35a1d6e30af29ff6432 (patch)
tree4099a922719ad1f4b8956993cd6ebe390b2b6a34
parent4978a785fa906b4dc9d79aa9251a3f9187c31206 (diff)
parent9a8bdeb7fb2c7128937d1f0c99f18aeea547a31d (diff)
Merge pull request #20692 from owncloud/federation_auto_add_servers
auto-add ownClouds to the list of trusted servers
-rw-r--r--apps/federation/appinfo/app.php1
-rw-r--r--apps/federation/appinfo/application.php20
-rw-r--r--apps/federation/lib/dbhandler.php1
-rw-r--r--apps/federation/lib/hooks.php50
-rw-r--r--apps/federation/tests/lib/dbhandlertest.php22
-rw-r--r--apps/federation/tests/lib/hookstest.php79
-rw-r--r--apps/files_sharing/lib/external/manager.php2
-rw-r--r--lib/private/share/share.php5
8 files changed, 175 insertions, 5 deletions
diff --git a/apps/federation/appinfo/app.php b/apps/federation/appinfo/app.php
index 9ed00f23866..8cc77885d6f 100644
--- a/apps/federation/appinfo/app.php
+++ b/apps/federation/appinfo/app.php
@@ -23,3 +23,4 @@ namespace OCA\Federation\AppInfo;
$app = new Application();
$app->registerSettings();
+$app->registerHooks();
diff --git a/apps/federation/appinfo/application.php b/apps/federation/appinfo/application.php
index 350b140b4dd..172283536b4 100644
--- a/apps/federation/appinfo/application.php
+++ b/apps/federation/appinfo/application.php
@@ -22,14 +22,15 @@
namespace OCA\Federation\AppInfo;
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 +128,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'
+ );
+ }
+
}
diff --git a/apps/federation/lib/dbhandler.php b/apps/federation/lib/dbhandler.php
index 61ba5c87cfd..7606593f780 100644
--- a/apps/federation/lib/dbhandler.php
+++ b/apps/federation/lib/dbhandler.php
@@ -68,6 +68,7 @@ class DbHandler {
*/
public function addServer($url) {
$hash = $this->hash($url);
+ $url = rtrim($url, '/');
$query = $this->connection->getQueryBuilder();
$query->insert($this->dbTable)
->values(
diff --git a/apps/federation/lib/hooks.php b/apps/federation/lib/hooks.php
new file mode 100644
index 00000000000..4bf5be4e5b6
--- /dev/null
+++ b/apps/federation/lib/hooks.php
@@ -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']);
+ }
+ }
+
+}
diff --git a/apps/federation/tests/lib/dbhandlertest.php b/apps/federation/tests/lib/dbhandlertest.php
index e47df092f8c..123eaaee450 100644
--- a/apps/federation/tests/lib/dbhandlertest.php
+++ b/apps/federation/tests/lib/dbhandlertest.php
@@ -67,17 +67,33 @@ class DbHandlerTest extends TestCase {
$query->execute();
}
- public function testAddServer() {
- $id = $this->dbHandler->addServer('server1');
+ /**
+ * @dataProvider dataTestAddServer
+ *
+ * @param string $url passed to the method
+ * @param string $expectedUrl the url we expect to be written to the db
+ * @param string $expectedHash the hash value we expect to be written to the db
+ */
+ public function testAddServer($url, $expectedUrl, $expectedHash) {
+ $id = $this->dbHandler->addServer($url);
$query = $this->connection->getQueryBuilder()->select('*')->from($this->dbTable);
$result = $query->execute()->fetchAll();
$this->assertSame(1, count($result));
- $this->assertSame('server1', $result[0]['url']);
+ $this->assertSame($expectedUrl, $result[0]['url']);
$this->assertSame($id, (int)$result[0]['id']);
+ $this->assertSame($expectedHash, $result[0]['url_hash']);
$this->assertSame(TrustedServers::STATUS_PENDING, (int)$result[0]['status']);
}
+ public function dataTestAddServer() {
+ return [
+ ['http://owncloud.org', 'http://owncloud.org', md5('owncloud.org')],
+ ['https://owncloud.org', 'https://owncloud.org', md5('owncloud.org')],
+ ['http://owncloud.org/', 'http://owncloud.org', md5('owncloud.org')],
+ ];
+ }
+
public function testRemove() {
$id1 = $this->dbHandler->addServer('server1');
$id2 = $this->dbHandler->addServer('server2');
diff --git a/apps/federation/tests/lib/hookstest.php b/apps/federation/tests/lib/hookstest.php
new file mode 100644
index 00000000000..5b19c167456
--- /dev/null
+++ b/apps/federation/tests/lib/hookstest.php
@@ -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],
+ ];
+ }
+}
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index 93e2cdb540b..020f55c5157 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -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;
}
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index 6aac0d6264d..1308c99f804 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -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;
+ }
}