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:
commit
8cfdcfb40d
|
@ -427,14 +427,25 @@ class ShareesAPIController extends OCSController {
|
||||||
|
|
||||||
$shareTypes = [
|
$shareTypes = [
|
||||||
Share::SHARE_TYPE_USER,
|
Share::SHARE_TYPE_USER,
|
||||||
Share::SHARE_TYPE_REMOTE,
|
|
||||||
Share::SHARE_TYPE_EMAIL
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if ($itemType === 'file' || $itemType === 'folder') {
|
||||||
if ($this->shareManager->allowGroupSharing()) {
|
if ($this->shareManager->allowGroupSharing()) {
|
||||||
$shareTypes[] = Share::SHARE_TYPE_GROUP;
|
$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'])) {
|
if (isset($_GET['shareType']) && is_array($_GET['shareType'])) {
|
||||||
$shareTypes = array_intersect($shareTypes, $_GET['shareType']);
|
$shareTypes = array_intersect($shareTypes, $_GET['shareType']);
|
||||||
sort($shareTypes);
|
sort($shareTypes);
|
||||||
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue