summaryrefslogtreecommitdiffstats
path: root/apps/federatedfilesharing
diff options
context:
space:
mode:
authorBjörn Schießle <bjoern@schiessle.org>2017-04-12 16:01:07 +0200
committerGitHub <noreply@github.com>2017-04-12 16:01:07 +0200
commitb90e91144bc8d378f6f52025f04383ae2e7c647b (patch)
tree616619d3778182ac53e77dc605fc9bded595fc63 /apps/federatedfilesharing
parent3cf2f6e31bca4b704549e428d7fcbf6c4ecd6c37 (diff)
parent42f40659f664b4cdcdd5f19cf7300ad740aec6a4 (diff)
downloadnextcloud-server-b90e91144bc8d378f6f52025f04383ae2e7c647b.tar.gz
nextcloud-server-b90e91144bc8d378f6f52025f04383ae2e7c647b.zip
Merge pull request #3614 from nextcloud/discover-federatedsharing-endpoints
Discover federatedsharing endpoints
Diffstat (limited to 'apps/federatedfilesharing')
-rw-r--r--apps/federatedfilesharing/lib/AppInfo/Application.php11
-rw-r--r--apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php9
-rw-r--r--apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php6
-rw-r--r--apps/federatedfilesharing/lib/Controller/RequestHandlerController.php20
-rw-r--r--apps/federatedfilesharing/lib/DiscoveryManager.php143
-rw-r--r--apps/federatedfilesharing/lib/Notifications.php14
-rw-r--r--apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php6
-rw-r--r--apps/federatedfilesharing/tests/DiscoveryManagerTest.php217
-rw-r--r--apps/federatedfilesharing/tests/NotificationsTest.php13
9 files changed, 28 insertions, 411 deletions
diff --git a/apps/federatedfilesharing/lib/AppInfo/Application.php b/apps/federatedfilesharing/lib/AppInfo/Application.php
index 3e97edeada0..9d8464e37d5 100644
--- a/apps/federatedfilesharing/lib/AppInfo/Application.php
+++ b/apps/federatedfilesharing/lib/AppInfo/Application.php
@@ -51,10 +51,7 @@ class Application extends App {
$notification = new Notifications(
$addressHandler,
$server->getHTTPClientService(),
- new \OCA\FederatedFileSharing\DiscoveryManager(
- $server->getMemCacheFactory(),
- $server->getHTTPClientService()
- ),
+ $server->query(\OCP\OCS\IDiscoveryService::class),
\OC::$server->getJobList()
);
return new RequestHandlerController(
@@ -99,14 +96,10 @@ class Application extends App {
\OC::$server->getL10N('federatedfilesharing'),
\OC::$server->getCloudIdManager()
);
- $discoveryManager = new \OCA\FederatedFileSharing\DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
$notifications = new \OCA\FederatedFileSharing\Notifications(
$addressHandler,
\OC::$server->getHTTPClientService(),
- $discoveryManager,
+ \OC::$server->query(\OCP\OCS\IDiscoveryService::class),
\OC::$server->getJobList()
);
$tokenHandler = new \OCA\FederatedFileSharing\TokenHandler(
diff --git a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
index 2356c569d87..821647e5e39 100644
--- a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
+++ b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
@@ -27,7 +27,6 @@ namespace OCA\FederatedFileSharing\BackgroundJob;
use OC\BackgroundJob\Job;
use OC\BackgroundJob\JobList;
use OCA\FederatedFileSharing\AddressHandler;
-use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\FederatedFileSharing\Notifications;
use OCP\BackgroundJob\IJobList;
use OCP\ILogger;
@@ -68,14 +67,10 @@ class RetryJob extends Job {
\OC::$server->getL10N('federatedfilesharing'),
\OC::$server->getCloudIdManager()
);
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
$this->notifications = new Notifications(
$addressHandler,
\OC::$server->getHTTPClientService(),
- $discoveryManager,
+ \OC::$server->query(\OCP\OCS\IDiscoveryService::class),
\OC::$server->getJobList()
);
}
@@ -108,7 +103,7 @@ class RetryJob extends Job {
$try = (int)$argument['try'] + 1;
$result = $this->notifications->sendUpdateToRemote($remote, $remoteId, $token, $action, $data, $try);
-
+
if ($result === true || $try > $this->maxTry) {
$this->retainJob = false;
}
diff --git a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
index dd2e88d2dae..d7e466d1a64 100644
--- a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
+++ b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
@@ -248,17 +248,13 @@ class MountPublicLinkController extends Controller {
if (Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer)) {
return new JSONResponse(['message' => $this->l->t('Not allowed to create a federated share with the owner.')], Http::STATUS_BAD_REQUEST);
}
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
$externalManager = new Manager(
\OC::$server->getDatabaseConnection(),
Filesystem::getMountManager(),
Filesystem::getLoader(),
\OC::$server->getHTTPClientService(),
\OC::$server->getNotificationManager(),
- $discoveryManager,
+ \OC::$server->query(\OCP\OCS\IDiscoveryService::class),
\OC::$server->getUserSession()->getUser()->getUID()
);
diff --git a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
index a41481afd2a..2b643810fb4 100644
--- a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
+++ b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
@@ -152,19 +152,15 @@ class RequestHandlerController extends OCSController {
\OC_Util::setupFS($shareWith);
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
$externalManager = new \OCA\Files_Sharing\External\Manager(
- \OC::$server->getDatabaseConnection(),
- \OC\Files\Filesystem::getMountManager(),
- \OC\Files\Filesystem::getLoader(),
- \OC::$server->getHTTPClientService(),
- \OC::$server->getNotificationManager(),
- $discoveryManager,
- $shareWith
- );
+ \OC::$server->getDatabaseConnection(),
+ \OC\Files\Filesystem::getMountManager(),
+ \OC\Files\Filesystem::getLoader(),
+ \OC::$server->getHTTPClientService(),
+ \OC::$server->getNotificationManager(),
+ \OC::$server->query(\OCP\OCS\IDiscoveryService::class),
+ $shareWith
+ );
try {
$externalManager->addShare($remote, $token, '', $name, $owner, false, $shareWith, $remoteId);
diff --git a/apps/federatedfilesharing/lib/DiscoveryManager.php b/apps/federatedfilesharing/lib/DiscoveryManager.php
deleted file mode 100644
index 8c8c72dbd66..00000000000
--- a/apps/federatedfilesharing/lib/DiscoveryManager.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Bjoern Schiessle <bjoern@schiessle.org>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Vincent Petry <pvince81@owncloud.com>
- *
- * @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\FederatedFileSharing;
-
-use GuzzleHttp\Exception\ClientException;
-use GuzzleHttp\Exception\ConnectException;
-use OCP\Http\Client\IClient;
-use OCP\Http\Client\IClientService;
-use OCP\ICache;
-use OCP\ICacheFactory;
-
-/**
- * Class DiscoveryManager handles the discovery of endpoints used by Federated
- * Cloud Sharing.
- *
- * @package OCA\FederatedFileSharing
- */
-class DiscoveryManager {
- /** @var ICache */
- private $cache;
- /** @var IClient */
- private $client;
-
- /**
- * @param ICacheFactory $cacheFactory
- * @param IClientService $clientService
- */
- public function __construct(ICacheFactory $cacheFactory,
- IClientService $clientService) {
- $this->cache = $cacheFactory->create('ocs-discovery');
- $this->client = $clientService->newClient();
- }
-
- /**
- * Returns whether the specified URL includes only safe characters, if not
- * returns false
- *
- * @param string $url
- * @return bool
- */
- private function isSafeUrl($url) {
- return (bool)preg_match('/^[\/\.A-Za-z0-9]+$/', $url);
- }
-
- /**
- * Discover the actual data and do some naive caching to ensure that the data
- * is not requested multiple times.
- *
- * If no valid discovery data is found the Nextcloud defaults are returned.
- *
- * @param string $remote
- * @return array
- */
- private function discover($remote) {
- // Check if something is in the cache
- if($cacheData = $this->cache->get($remote)) {
- return json_decode($cacheData, true);
- }
-
- // Default response body
- $discoveredServices = [
- 'webdav' => '/public.php/webdav',
- 'share' => '/ocs/v1.php/cloud/shares',
- ];
-
- // Read the data from the response body
- try {
- $response = $this->client->get($remote . '/ocs-provider/', [
- 'timeout' => 10,
- 'connect_timeout' => 10,
- ]);
- if($response->getStatusCode() === 200) {
- $decodedService = json_decode($response->getBody(), true);
- if(is_array($decodedService)) {
- $endpoints = [
- 'webdav',
- 'share',
- ];
-
- foreach($endpoints as $endpoint) {
- if(isset($decodedService['services']['FEDERATED_SHARING']['endpoints'][$endpoint])) {
- $endpointUrl = (string)$decodedService['services']['FEDERATED_SHARING']['endpoints'][$endpoint];
- if($this->isSafeUrl($endpointUrl)) {
- $discoveredServices[$endpoint] = $endpointUrl;
- }
- }
- }
- }
- }
- } catch (ClientException $e) {
- // Don't throw any exception since exceptions are handled before
- } catch (ConnectException $e) {
- // Don't throw any exception since exceptions are handled before
- }
-
- // Write into cache
- $this->cache->set($remote, json_encode($discoveredServices));
- return $discoveredServices;
- }
-
- /**
- * Return the public WebDAV endpoint used by the specified remote
- *
- * @param string $host
- * @return string
- */
- public function getWebDavEndpoint($host) {
- return $this->discover($host)['webdav'];
- }
-
- /**
- * Return the sharing endpoint used by the specified remote
- *
- * @param string $host
- * @return string
- */
- public function getShareEndpoint($host) {
- return $this->discover($host)['share'];
- }
-}
diff --git a/apps/federatedfilesharing/lib/Notifications.php b/apps/federatedfilesharing/lib/Notifications.php
index 8110b4915da..5abac711985 100644
--- a/apps/federatedfilesharing/lib/Notifications.php
+++ b/apps/federatedfilesharing/lib/Notifications.php
@@ -30,6 +30,7 @@ namespace OCA\FederatedFileSharing;
use OCP\AppFramework\Http;
use OCP\BackgroundJob\IJobList;
use OCP\Http\Client\IClientService;
+use OCP\OCS\IDiscoveryService;
class Notifications {
const RESPONSE_FORMAT = 'json'; // default response format for ocs calls
@@ -40,8 +41,8 @@ class Notifications {
/** @var IClientService */
private $httpClientService;
- /** @var DiscoveryManager */
- private $discoveryManager;
+ /** @var IDiscoveryService */
+ private $discoveryService;
/** @var IJobList */
private $jobList;
@@ -49,18 +50,18 @@ class Notifications {
/**
* @param AddressHandler $addressHandler
* @param IClientService $httpClientService
- * @param DiscoveryManager $discoveryManager
+ * @param IDiscoveryService $discoveryService
* @param IJobList $jobList
*/
public function __construct(
AddressHandler $addressHandler,
IClientService $httpClientService,
- DiscoveryManager $discoveryManager,
+ IDiscoveryService $discoveryService,
IJobList $jobList
) {
$this->addressHandler = $addressHandler;
$this->httpClientService = $httpClientService;
- $this->discoveryManager = $discoveryManager;
+ $this->discoveryService = $discoveryService;
$this->jobList = $jobList;
}
@@ -287,7 +288,8 @@ class Notifications {
'result' => '',
];
- $endpoint = $this->discoveryManager->getShareEndpoint($remoteDomain);
+ $federationEndpoints = $this->discoveryService->discover($remoteDomain, 'FEDERATED_SHARING');
+ $endpoint = isset($federationEndpoints['share']) ? $federationEndpoints['share'] : '/ocs/v2.php/cloud/shares';
try {
$response = $client->post($remoteDomain . $endpoint . $urlSuffix . '?format=' . self::RESPONSE_FORMAT, [
'body' => $fields,
diff --git a/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
index 233395dec9f..512000181c1 100644
--- a/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
+++ b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
@@ -270,17 +270,13 @@ class RequestHandlerControllerTest extends TestCase {
->method('newClient')
->willReturn($client);
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- $httpClientService
- );
$manager = new \OCA\Files_Sharing\External\Manager(
\OC::$server->getDatabaseConnection(),
Filesystem::getMountManager(),
Filesystem::getLoader(),
$httpClientService,
\OC::$server->getNotificationManager(),
- $discoveryManager,
+ \OC::$server->query(\OCP\OCS\IDiscoveryService::class),
$toDelete
);
diff --git a/apps/federatedfilesharing/tests/DiscoveryManagerTest.php b/apps/federatedfilesharing/tests/DiscoveryManagerTest.php
deleted file mode 100644
index 77e24aad54b..00000000000
--- a/apps/federatedfilesharing/tests/DiscoveryManagerTest.php
+++ /dev/null
@@ -1,217 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Björn Schießle <bjoern@schiessle.org>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Vincent Petry <pvince81@owncloud.com>
- *
- * @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\FederatedFileSharing\Tests;
-
-use OCA\FederatedFileSharing\DiscoveryManager;
-use OCP\Http\Client\IClient;
-use OCP\Http\Client\IClientService;
-use OCP\ICache;
-use OCP\ICacheFactory;
-
-class DiscoveryManagerTest extends \Test\TestCase {
- /** @var ICache */
- private $cache;
- /** @var IClient */
- private $client;
- /** @var DiscoveryManager */
- private $discoveryManager;
-
- public function setUp() {
- parent::setUp();
- $this->cache = $this->getMockBuilder('\OCP\ICache')
- ->getMock();
- /** @var ICacheFactory $cacheFactory */
- $cacheFactory = $this->getMockBuilder('\OCP\ICacheFactory')
- ->disableOriginalConstructor()->getMock();
- $cacheFactory
- ->expects($this->once())
- ->method('create')
- ->with('ocs-discovery')
- ->willReturn($this->cache);
-
- $this->client = $this->getMockBuilder('\OCP\Http\Client\IClient')
- ->disableOriginalConstructor()->getMock();
- /** @var IClientService $clientService */
- $clientService = $this->getMockBuilder('\OCP\Http\Client\IClientService')
- ->disableOriginalConstructor()->getMock();
- $clientService
- ->expects($this->once())
- ->method('newClient')
- ->willReturn($this->client);
-
- $this->discoveryManager = new DiscoveryManager(
- $cacheFactory,
- $clientService
- );
- }
-
- public function testWithMalformedFormattedEndpointCached() {
- $response = $this->getMockBuilder('\OCP\Http\Client\IResponse')
- ->getMock();
- $response
- ->expects($this->once())
- ->method('getStatusCode')
- ->willReturn(200);
- $response
- ->expects($this->once())
- ->method('getBody')
- ->willReturn('CertainlyNotJson');
- $this->client
- ->expects($this->once())
- ->method('get')
- ->with('https://myhost.com/ocs-provider/', [
- 'timeout' => 10,
- 'connect_timeout' => 10,
- ])
- ->willReturn($response);
- $this->cache
- ->expects($this->at(0))
- ->method('get')
- ->with('https://myhost.com')
- ->willReturn(null);
- $this->cache
- ->expects($this->at(1))
- ->method('set')
- ->with('https://myhost.com', '{"webdav":"\/public.php\/webdav","share":"\/ocs\/v1.php\/cloud\/shares"}');
- $this->cache
- ->expects($this->at(2))
- ->method('get')
- ->with('https://myhost.com')
- ->willReturn('{"webdav":"\/public.php\/webdav","share":"\/ocs\/v1.php\/cloud\/shares"}');
-
- $this->assertSame('/public.php/webdav', $this->discoveryManager->getWebDavEndpoint('https://myhost.com'));
- $this->assertSame('/ocs/v1.php/cloud/shares', $this->discoveryManager->getShareEndpoint('https://myhost.com'));
- }
-
- public function testGetWebDavEndpointWithValidFormattedEndpointAndNotCached() {
- $response = $this->getMockBuilder('\OCP\Http\Client\IResponse')
- ->getMock();
- $response
- ->expects($this->once())
- ->method('getStatusCode')
- ->willReturn(200);
- $response
- ->expects($this->once())
- ->method('getBody')
- ->willReturn('{"version":2,"services":{"PRIVATE_DATA":{"version":1,"endpoints":{"store":"\/ocs\/v2.php\/privatedata\/setattribute","read":"\/ocs\/v2.php\/privatedata\/getattribute","delete":"\/ocs\/v2.php\/privatedata\/deleteattribute"}},"SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/apps\/files_sharing\/api\/v1\/shares"}},"FEDERATED_SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/cloud\/shares","webdav":"\/public.php\/MyCustomEndpoint\/"}},"ACTIVITY":{"version":1,"endpoints":{"list":"\/ocs\/v2.php\/cloud\/activity"}},"PROVISIONING":{"version":1,"endpoints":{"user":"\/ocs\/v2.php\/cloud\/users","groups":"\/ocs\/v2.php\/cloud\/groups","apps":"\/ocs\/v2.php\/cloud\/apps"}}}}');
- $this->client
- ->expects($this->once())
- ->method('get')
- ->with('https://myhost.com/ocs-provider/', [
- 'timeout' => 10,
- 'connect_timeout' => 10,
- ])
- ->willReturn($response);
-
- $expectedResult = '/public.php/MyCustomEndpoint/';
- $this->assertSame($expectedResult, $this->discoveryManager->getWebDavEndpoint('https://myhost.com'));
- }
-
- public function testGetWebDavEndpointWithValidFormattedEndpointWithoutDataAndNotCached() {
- $response = $this->getMockBuilder('\OCP\Http\Client\IResponse')
- ->getMock();
- $response
- ->expects($this->once())
- ->method('getStatusCode')
- ->willReturn(200);
- $response
- ->expects($this->once())
- ->method('getBody')
- ->willReturn('{"version":2,"PRIVATE_DATA":{"version":1,"endpoints":{"store":"\/ocs\/v2.php\/privatedata\/setattribute","read":"\/ocs\/v2.php\/privatedata\/getattribute","delete":"\/ocs\/v2.php\/privatedata\/deleteattribute"}},"SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/apps\/files_sharing\/api\/v1\/shares"}},"FEDERATED_SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/cloud\/shares","webdav":"\/public.php\/MyCustomEndpoint\/"}},"ACTIVITY":{"version":1,"endpoints":{"list":"\/ocs\/v2.php\/cloud\/activity"}},"PROVISIONING":{"version":1,"endpoints":{"user":"\/ocs\/v2.php\/cloud\/users","groups":"\/ocs\/v2.php\/cloud\/groups","apps":"\/ocs\/v2.php\/cloud\/apps"}}}');
- $this->client
- ->expects($this->once())
- ->method('get')
- ->with('https://myhost.com/ocs-provider/', [
- 'timeout' => 10,
- 'connect_timeout' => 10,
- ])
- ->willReturn($response);
-
- $expectedResult = '/public.php/webdav';
- $this->assertSame($expectedResult, $this->discoveryManager->getWebDavEndpoint('https://myhost.com'));
- }
-
- public function testGetShareEndpointWithValidFormattedEndpointAndNotCached() {
- $response = $this->getMockBuilder('\OCP\Http\Client\IResponse')
- ->getMock();
- $response
- ->expects($this->once())
- ->method('getStatusCode')
- ->willReturn(200);
- $response
- ->expects($this->once())
- ->method('getBody')
- ->willReturn('{"version":2,"services":{"PRIVATE_DATA":{"version":1,"endpoints":{"store":"\/ocs\/v2.php\/privatedata\/setattribute","read":"\/ocs\/v2.php\/privatedata\/getattribute","delete":"\/ocs\/v2.php\/privatedata\/deleteattribute"}},"SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/apps\/files_sharing\/api\/v1\/shares"}},"FEDERATED_SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/cloud\/MyCustomShareEndpoint","webdav":"\/public.php\/MyCustomEndpoint\/"}},"ACTIVITY":{"version":1,"endpoints":{"list":"\/ocs\/v2.php\/cloud\/activity"}},"PROVISIONING":{"version":1,"endpoints":{"user":"\/ocs\/v2.php\/cloud\/users","groups":"\/ocs\/v2.php\/cloud\/groups","apps":"\/ocs\/v2.php\/cloud\/apps"}}}}');
- $this->client
- ->expects($this->once())
- ->method('get')
- ->with('https://myhost.com/ocs-provider/', [
- 'timeout' => 10,
- 'connect_timeout' => 10,
- ])
- ->willReturn($response);
-
- $expectedResult = '/ocs/v2.php/cloud/MyCustomShareEndpoint';
- $this->assertSame($expectedResult, $this->discoveryManager->getShareEndpoint('https://myhost.com'));
- }
-
- public function testWithMaliciousEndpointCached() {
- $response = $this->getMockBuilder('\OCP\Http\Client\IResponse')
- ->getMock();
- $response
- ->expects($this->once())
- ->method('getStatusCode')
- ->willReturn(200);
- $response
- ->expects($this->once())
- ->method('getBody')
- ->willReturn('{"version":2,"services":{"PRIVATE_DATA":{"version":1,"endpoints":{"store":"\/ocs\/v2.php\/privatedata\/setattribute","read":"\/ocs\/v2.php\/privatedata\/getattribute","delete":"\/ocs\/v2.php\/privatedata\/deleteattribute"}},"SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/apps\/files_sharing\/api\/v1\/shares"}},"FEDERATED_SHARING":{"version":1,"endpoints":{"share":"\/ocs\/v2.php\/cl@oud\/MyCustomShareEndpoint","webdav":"\/public.php\/MyC:ustomEndpoint\/"}},"ACTIVITY":{"version":1,"endpoints":{"list":"\/ocs\/v2.php\/cloud\/activity"}},"PROVISIONING":{"version":1,"endpoints":{"user":"\/ocs\/v2.php\/cloud\/users","groups":"\/ocs\/v2.php\/cloud\/groups","apps":"\/ocs\/v2.php\/cloud\/apps"}}}}');
- $this->client
- ->expects($this->once())
- ->method('get')
- ->with('https://myhost.com/ocs-provider/', [
- 'timeout' => 10,
- 'connect_timeout' => 10,
- ])
- ->willReturn($response);
- $this->cache
- ->expects($this->at(0))
- ->method('get')
- ->with('https://myhost.com')
- ->willReturn(null);
- $this->cache
- ->expects($this->at(1))
- ->method('set')
- ->with('https://myhost.com', '{"webdav":"\/public.php\/webdav","share":"\/ocs\/v1.php\/cloud\/shares"}');
- $this->cache
- ->expects($this->at(2))
- ->method('get')
- ->with('https://myhost.com')
- ->willReturn('{"webdav":"\/public.php\/webdav","share":"\/ocs\/v1.php\/cloud\/shares"}');
-
- $this->assertSame('/public.php/webdav', $this->discoveryManager->getWebDavEndpoint('https://myhost.com'));
- $this->assertSame('/ocs/v1.php/cloud/shares', $this->discoveryManager->getShareEndpoint('https://myhost.com'));
- }
-}
diff --git a/apps/federatedfilesharing/tests/NotificationsTest.php b/apps/federatedfilesharing/tests/NotificationsTest.php
index a5f5c6bc078..4f70d5f3950 100644
--- a/apps/federatedfilesharing/tests/NotificationsTest.php
+++ b/apps/federatedfilesharing/tests/NotificationsTest.php
@@ -25,10 +25,10 @@ namespace OCA\FederatedFileSharing\Tests;
use OCA\FederatedFileSharing\AddressHandler;
-use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\FederatedFileSharing\Notifications;
use OCP\BackgroundJob\IJobList;
use OCP\Http\Client\IClientService;
+use OCP\OCS\IDiscoveryService;
class NotificationsTest extends \Test\TestCase {
@@ -38,8 +38,8 @@ class NotificationsTest extends \Test\TestCase {
/** @var IClientService | \PHPUnit_Framework_MockObject_MockObject*/
private $httpClientService;
- /** @var DiscoveryManager | \PHPUnit_Framework_MockObject_MockObject */
- private $discoveryManager;
+ /** @var IDiscoveryService | \PHPUnit_Framework_MockObject_MockObject */
+ private $discoveryService;
/** @var IJobList | \PHPUnit_Framework_MockObject_MockObject */
private $jobList;
@@ -48,8 +48,7 @@ class NotificationsTest extends \Test\TestCase {
parent::setUp();
$this->jobList = $this->getMockBuilder('OCP\BackgroundJob\IJobList')->getMock();
- $this->discoveryManager = $this->getMockBuilder('OCA\FederatedFileSharing\DiscoveryManager')
- ->disableOriginalConstructor()->getMock();
+ $this->discoveryService = $this->getMockBuilder(IDiscoveryService::class)->getMock();
$this->httpClientService = $this->getMockBuilder('OCP\Http\Client\IClientService')->getMock();
$this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler')
->disableOriginalConstructor()->getMock();
@@ -67,7 +66,7 @@ class NotificationsTest extends \Test\TestCase {
$instance = new Notifications(
$this->addressHandler,
$this->httpClientService,
- $this->discoveryManager,
+ $this->discoveryService,
$this->jobList
);
} else {
@@ -76,7 +75,7 @@ class NotificationsTest extends \Test\TestCase {
[
$this->addressHandler,
$this->httpClientService,
- $this->discoveryManager,
+ $this->discoveryService,
$this->jobList
]
)->setMethods($mockedMethods)->getMock();