From cbc6118f5118cf2201f951db640c32d91d3f5631 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 10 Nov 2016 14:16:35 +0100 Subject: [PATCH] Only check the sharing backends for file/folder items Signed-off-by: Joas Schilling --- .../lib/Controller/ShareesAPIController.php | 27 +++++----- .../Controller/ShareesAPIControllerTest.php | 51 +++++++++++++++---- 2 files changed, 54 insertions(+), 24 deletions(-) diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php index 5e01c9bfb0..09912b7758 100644 --- a/apps/files_sharing/lib/Controller/ShareesAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php @@ -427,12 +427,23 @@ class ShareesAPIController extends OCSController { $shareTypes = [ Share::SHARE_TYPE_USER, - Share::SHARE_TYPE_REMOTE, - Share::SHARE_TYPE_EMAIL ]; - if ($this->shareManager->allowGroupSharing()) { + if ($itemType === 'file' || $itemType === 'folder') { + if ($this->shareManager->allowGroupSharing()) { + $shareTypes[] = Share::SHARE_TYPE_GROUP; + } + + if ($this->isRemoteSharingAllowed($itemType)) { + $shareTypes[] = Share::SHARE_TYPE_REMOTE; + } + + if ($this->shareManager->shareProviderExists(Share::SHARE_TYPE_EMAIL)) { + $shareTypes[] = Share::SHARE_TYPE_EMAIL; + } + } else { $shareTypes[] = Share::SHARE_TYPE_GROUP; + $shareTypes[] = Share::SHARE_TYPE_EMAIL; } if (isset($_GET['shareType']) && is_array($_GET['shareType'])) { @@ -443,16 +454,6 @@ class ShareesAPIController extends OCSController { sort($shareTypes); } - if (in_array(Share::SHARE_TYPE_REMOTE, $shareTypes) && !$this->isRemoteSharingAllowed($itemType)) { - // Remove remote shares from type array, because it is not allowed. - $shareTypes = array_diff($shareTypes, [Share::SHARE_TYPE_REMOTE]); - } - - if (!$this->shareManager->shareProviderExists(Share::SHARE_TYPE_EMAIL)) { - // Remove mail shares from type array, because the share provider is not loaded - $shareTypes = array_diff($shareTypes, [Share::SHARE_TYPE_EMAIL]); - } - $this->shareWithGroupOnly = $this->config->getAppValue('core', 'shareapi_only_share_with_group_members', 'no') === 'yes'; $this->shareeEnumeration = $this->config->getAppValue('core', 'shareapi_allow_share_dialog_user_enumeration', 'yes') === 'yes'; $this->limit = (int) $perPage; diff --git a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php index e8ee55d184..336dcb70f0 100644 --- a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php @@ -1221,93 +1221,121 @@ class ShareesAPIControllerTest extends TestCase { } public function dataSearch() { + $noRemote = [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_EMAIL]; $allTypes = [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE, Share::SHARE_TYPE_EMAIL]; return [ - [[], '', 'yes', true, true, $allTypes, false, true, true], + [[], '', 'yes', true, true, $noRemote, false, true, true], // Test itemType [[ 'search' => '', - ], '', 'yes', true, true, $allTypes, false, true, true], + ], '', 'yes', true, true, $noRemote, false, true, true], [[ 'search' => 'foobar', - ], '', 'yes', true, true, $allTypes, false, true, true], + ], '', 'yes', true, true, $noRemote, false, true, true], [[ 'search' => 0, - ], '', 'yes', true, true, $allTypes, false, true, true], + ], '', 'yes', true, true, $noRemote, false, true, true], // Test itemType [[ 'itemType' => '', - ], '', 'yes', true, true, $allTypes, false, true, true], + ], '', 'yes', true, true, $noRemote, false, true, true], [[ 'itemType' => 'folder', ], '', 'yes', true, true, $allTypes, false, true, true], [[ 'itemType' => 0, - ], '', 'yes', true, true, $allTypes, false, true, true], + ], '', 'yes', true, true, $noRemote, false, true, true], // Test shareType [[ + 'itemType' => 'call', + ], '', 'yes', true, true, $noRemote, false, true, true], + [[ + 'itemType' => 'folder', ], '', 'yes', true, true, $allTypes, false, true, true], [[ + 'itemType' => 'folder', 'shareType' => 0, ], '', 'yes', true, false, [0], false, true, true], [[ + 'itemType' => 'folder', 'shareType' => '0', ], '', 'yes', true, false, [0], false, true, true], [[ + 'itemType' => 'folder', 'shareType' => 1, ], '', 'yes', true, false, [1], false, true, true], [[ + 'itemType' => 'folder', 'shareType' => 12, ], '', 'yes', true, false, [], false, true, true], [[ + 'itemType' => 'folder', 'shareType' => 'foobar', ], '', 'yes', true, true, $allTypes, false, true, true], [[ + 'itemType' => 'folder', 'shareType' => [0, 1, 2], ], '', 'yes', false, false, [0, 1], false, true, true], [[ + 'itemType' => 'folder', 'shareType' => [0, 1], ], '', 'yes', false, false, [0, 1], false, true, true], [[ + 'itemType' => 'folder', 'shareType' => $allTypes, ], '', 'yes', true, true, $allTypes, false, true, true], [[ + 'itemType' => 'folder', 'shareType' => $allTypes, ], '', 'yes', false, false, [0, 1], false, true, true], [[ + 'itemType' => 'folder', 'shareType' => $allTypes, ], '', 'yes', true, false, [0, 6], false, true, false], [[ + 'itemType' => 'folder', 'shareType' => $allTypes, ], '', 'yes', false, true, [0, 4], false, true, false], // Test pagination [[ + 'itemType' => 'folder', 'page' => 1, ], '', 'yes', true, true, $allTypes, false, true, true], [[ + 'itemType' => 'folder', 'page' => 10, ], '', 'yes', true, true, $allTypes, false, true, true], // Test perPage [[ + 'itemType' => 'folder', 'perPage' => 1, ], '', 'yes', true, true, $allTypes, false, true, true], [[ + 'itemType' => 'folder', 'perPage' => 10, ], '', 'yes', true, true, $allTypes, false, true, true], // Test $shareWithGroupOnly setting - [[], 'no', 'yes', true, true, $allTypes, false, true, true], - [[], 'yes', 'yes', true, true, $allTypes, true, true, true], + [[ + 'itemType' => 'folder', + ], 'no', 'yes', true, true, $allTypes, false, true, true], + [[ + 'itemType' => 'folder', + ], 'yes', 'yes', true, true, $allTypes, true, true, true], // Test $shareeEnumeration setting - [[], 'no', 'yes', true, true, $allTypes, false, true, true], - [[], 'no', 'no', true, true, $allTypes, false, false, true], + [[ + 'itemType' => 'folder', + ], 'no', 'yes', true, true, $allTypes, false, true, true], + [[ + 'itemType' => 'folder', + ], 'no', 'no', true, true, $allTypes, false, false, true], ]; } @@ -1318,6 +1346,7 @@ class ShareesAPIControllerTest extends TestCase { * @param string $apiSetting * @param string $enumSetting * @param bool $remoteSharingEnabled + * @param bool $emailSharingEnabled * @param array $shareTypes * @param bool $shareWithGroupOnly * @param bool $shareeEnumeration @@ -1341,7 +1370,7 @@ class ShareesAPIControllerTest extends TestCase { ['core', 'shareapi_allow_share_dialog_user_enumeration', 'yes', $enumSetting], ]); - $this->shareManager->expects($this->once()) + $this->shareManager->expects($itemType === 'file' || $itemType === 'folder' ? $this->once() : $this->never()) ->method('allowGroupSharing') ->willReturn($allowGroupSharing);