Merge pull request #2077 from nextcloud/allow-sharees-to-be-used-for-other-things

Only check the sharing backends for file/folder items
This commit is contained in:
Roeland Jago Douma 2016-11-10 20:16:36 +01:00 committed by GitHub
commit 8cfdcfb40d
2 changed files with 54 additions and 24 deletions

View File

@ -427,12 +427,23 @@ class ShareesAPIController extends OCSController {
$shareTypes = [ $shareTypes = [
Share::SHARE_TYPE_USER, 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_GROUP;
$shareTypes[] = Share::SHARE_TYPE_EMAIL;
} }
if (isset($_GET['shareType']) && is_array($_GET['shareType'])) { if (isset($_GET['shareType']) && is_array($_GET['shareType'])) {
@ -443,16 +454,6 @@ class ShareesAPIController extends OCSController {
sort($shareTypes); 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->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->shareeEnumeration = $this->config->getAppValue('core', 'shareapi_allow_share_dialog_user_enumeration', 'yes') === 'yes';
$this->limit = (int) $perPage; $this->limit = (int) $perPage;

View File

@ -1221,93 +1221,121 @@ class ShareesAPIControllerTest extends TestCase {
} }
public function dataSearch() { 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]; $allTypes = [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE, Share::SHARE_TYPE_EMAIL];
return [ return [
[[], '', 'yes', true, true, $allTypes, false, true, true], [[], '', 'yes', true, true, $noRemote, false, true, true],
// Test itemType // Test itemType
[[ [[
'search' => '', 'search' => '',
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $noRemote, false, true, true],
[[ [[
'search' => 'foobar', 'search' => 'foobar',
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $noRemote, false, true, true],
[[ [[
'search' => 0, 'search' => 0,
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $noRemote, false, true, true],
// Test itemType // Test itemType
[[ [[
'itemType' => '', 'itemType' => '',
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $noRemote, false, true, true],
[[ [[
'itemType' => 'folder', 'itemType' => 'folder',
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $allTypes, false, true, true],
[[ [[
'itemType' => 0, 'itemType' => 0,
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $noRemote, false, true, true],
// Test shareType // Test shareType
[[ [[
'itemType' => 'call',
], '', 'yes', true, true, $noRemote, false, true, true],
[[
'itemType' => 'folder',
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $allTypes, false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => 0, 'shareType' => 0,
], '', 'yes', true, false, [0], false, true, true], ], '', 'yes', true, false, [0], false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => '0', 'shareType' => '0',
], '', 'yes', true, false, [0], false, true, true], ], '', 'yes', true, false, [0], false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => 1, 'shareType' => 1,
], '', 'yes', true, false, [1], false, true, true], ], '', 'yes', true, false, [1], false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => 12, 'shareType' => 12,
], '', 'yes', true, false, [], false, true, true], ], '', 'yes', true, false, [], false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => 'foobar', 'shareType' => 'foobar',
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $allTypes, false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => [0, 1, 2], 'shareType' => [0, 1, 2],
], '', 'yes', false, false, [0, 1], false, true, true], ], '', 'yes', false, false, [0, 1], false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => [0, 1], 'shareType' => [0, 1],
], '', 'yes', false, false, [0, 1], false, true, true], ], '', 'yes', false, false, [0, 1], false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => $allTypes, 'shareType' => $allTypes,
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $allTypes, false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => $allTypes, 'shareType' => $allTypes,
], '', 'yes', false, false, [0, 1], false, true, true], ], '', 'yes', false, false, [0, 1], false, true, true],
[[ [[
'itemType' => 'folder',
'shareType' => $allTypes, 'shareType' => $allTypes,
], '', 'yes', true, false, [0, 6], false, true, false], ], '', 'yes', true, false, [0, 6], false, true, false],
[[ [[
'itemType' => 'folder',
'shareType' => $allTypes, 'shareType' => $allTypes,
], '', 'yes', false, true, [0, 4], false, true, false], ], '', 'yes', false, true, [0, 4], false, true, false],
// Test pagination // Test pagination
[[ [[
'itemType' => 'folder',
'page' => 1, 'page' => 1,
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $allTypes, false, true, true],
[[ [[
'itemType' => 'folder',
'page' => 10, 'page' => 10,
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $allTypes, false, true, true],
// Test perPage // Test perPage
[[ [[
'itemType' => 'folder',
'perPage' => 1, 'perPage' => 1,
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $allTypes, false, true, true],
[[ [[
'itemType' => 'folder',
'perPage' => 10, 'perPage' => 10,
], '', 'yes', true, true, $allTypes, false, true, true], ], '', 'yes', true, true, $allTypes, false, true, true],
// Test $shareWithGroupOnly setting // 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 // 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 $apiSetting
* @param string $enumSetting * @param string $enumSetting
* @param bool $remoteSharingEnabled * @param bool $remoteSharingEnabled
* @param bool $emailSharingEnabled
* @param array $shareTypes * @param array $shareTypes
* @param bool $shareWithGroupOnly * @param bool $shareWithGroupOnly
* @param bool $shareeEnumeration * @param bool $shareeEnumeration
@ -1341,7 +1370,7 @@ class ShareesAPIControllerTest extends TestCase {
['core', 'shareapi_allow_share_dialog_user_enumeration', 'yes', $enumSetting], ['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') ->method('allowGroupSharing')
->willReturn($allowGroupSharing); ->willReturn($allowGroupSharing);