aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Schiessle <bjoern@schiessle.org>2016-10-24 17:03:36 +0200
committerBjoern Schiessle <bjoern@schiessle.org>2016-11-01 19:54:39 +0100
commit318160647a62386b4fda5c04ddca04673bf97813 (patch)
tree4682a016d1e9e10e827e5fcb1d7781b0066c49b0
parent96c40d14a1a253974db8cb2a51f227afe5dff7bf (diff)
downloadnextcloud-server-318160647a62386b4fda5c04ddca04673bf97813.tar.gz
nextcloud-server-318160647a62386b4fda5c04ddca04673bf97813.zip
add method to check if a share provider for a given type is loaded
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
-rw-r--r--lib/private/Share20/Manager.php14
-rw-r--r--lib/public/Share/IManager.php8
-rw-r--r--tests/lib/Share20/ManagerTest.php40
3 files changed, 62 insertions, 0 deletions
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index 19d6151a037..899bd4ebfa1 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -30,6 +30,7 @@ namespace OC\Share20;
use OC\Cache\CappedMemoryCache;
use OC\Files\Mount\MoveableMount;
use OC\HintException;
+use OC\Share20\Exception\ProviderException;
use OCP\Files\File;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
@@ -1291,4 +1292,17 @@ class Manager implements IManager {
return $this->config->getAppValue('files_sharing', 'outgoing_server2server_share_enabled', 'yes') === 'yes';
}
+ /**
+ * @inheritdoc
+ */
+ public function shareProviderExists($shareType) {
+ try {
+ $this->factory->getProviderForType($shareType);
+ } catch (ProviderException $e) {
+ return false;
+ }
+
+ return true;
+ }
+
}
diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php
index a74ab5fe796..137dc309280 100644
--- a/lib/public/Share/IManager.php
+++ b/lib/public/Share/IManager.php
@@ -286,4 +286,12 @@ interface IManager {
*/
public function outgoingServer2ServerSharesAllowed();
+ /**
+ * Check if a given share provider exists
+ * @param int $shareType
+ * @return bool
+ * @since 9.2.0
+ */
+ public function shareProviderExists($shareType);
+
}
diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php
index c0c7b48b35d..bd85e3c73aa 100644
--- a/tests/lib/Share20/ManagerTest.php
+++ b/tests/lib/Share20/ManagerTest.php
@@ -2530,6 +2530,46 @@ class ManagerTest extends \Test\TestCase {
$this->manager->moveShare($share, 'recipient');
}
+
+ /**
+ * @dataProvider dataTestShareProviderExists
+ */
+ public function testShareProviderExists($shareType, $expected) {
+
+ $factory = $this->getMockBuilder('OCP\Share\IProviderFactory')->getMock();
+ $factory->expects($this->any())->method('getProviderForType')
+ ->willReturnCallback(function ($id) {
+ if ($id === \OCP\Share::SHARE_TYPE_USER) {
+ return true;
+ }
+ throw new Exception\ProviderException();
+ });
+
+ $manager = new Manager(
+ $this->logger,
+ $this->config,
+ $this->secureRandom,
+ $this->hasher,
+ $this->mountManager,
+ $this->groupManager,
+ $this->l,
+ $factory,
+ $this->userManager,
+ $this->rootFolder,
+ $this->eventDispatcher
+ );
+ $this->assertSame($expected,
+ $manager->shareProviderExists($shareType)
+ );
+ }
+
+ public function dataTestShareProviderExists() {
+ return [
+ [\OCP\Share::SHARE_TYPE_USER, true],
+ [42, false],
+ ];
+ }
+
public function testGetSharesInFolder() {
$factory = new DummyFactory2($this->createMock(IServerContainer::class));