Merge pull request #32631 from nextcloud/feature/32629/getAccessList-share-by-email-recipients

Get access list share by email recipients
This commit is contained in:
Andy Scherzinger 2024-03-25 12:40:10 +01:00 committed by GitHub
commit 46906b7d69
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 32 additions and 14 deletions

View File

@ -1098,21 +1098,32 @@ class ShareByMailProvider implements IShareProvider {
}
$qb = $this->dbConnection->getQueryBuilder();
$qb->select('share_with')
$qb->select('share_with', 'file_source', 'token')
->from('share')
->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL)))
->andWhere($qb->expr()->in('file_source', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)))
->andWhere($qb->expr()->orX(
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
))
->setMaxResults(1);
));
$cursor = $qb->executeQuery();
$mail = $cursor->fetch() !== false;
$public = false;
$mail = [];
while ($row = $cursor->fetch()) {
$public = true;
if ($currentAccess === false) {
$mail[] = $row['share_with'];
} else {
$mail[$row['share_with']] = [
'node_id' => $row['file_source'],
'token' => $row['token']
];
}
}
$cursor->closeCursor();
return ['public' => $mail];
return ['public' => $public, 'mail' => $mail];
}
public function getAllShares(): iterable {

View File

@ -1672,9 +1672,10 @@ class Manager implements IManager {
* |-folder2 (32)
* |-fileA (42)
*
* fileA is shared with user1 and user1@server1
* fileA is shared with user1 and user1@server1 and email1@maildomain1
* folder2 is shared with group2 (user4 is a member of group2)
* folder1 is shared with user2 (renamed to "folder (1)") and user2@server2
* and email2@maildomain2
*
* Then the access list to '/folder1/folder2/fileA' with $currentAccess is:
* [
@ -1688,7 +1689,10 @@ class Manager implements IManager {
* 'user2@server2' => ['node_id' => 23, 'token' => 'FooBaR'],
* ],
* public => bool
* mail => bool
* mail => [
* 'email1@maildomain1' => ['node_id' => 42, 'token' => 'aBcDeFg'],
* 'email2@maildomain2' => ['node_id' => 23, 'token' => 'hIjKlMn'],
* ]
* ]
*
* The access list to '/folder1/folder2/fileA' **without** $currentAccess is:
@ -1696,7 +1700,7 @@ class Manager implements IManager {
* users => ['user1', 'user2', 'user4'],
* remote => bool,
* public => bool
* mail => bool
* mail => ['email1@maildomain1', 'email2@maildomain2']
* ]
*
* This is required for encryption/activity
@ -1716,9 +1720,9 @@ class Manager implements IManager {
$owner = $owner->getUID();
if ($currentAccess) {
$al = ['users' => [], 'remote' => [], 'public' => false];
$al = ['users' => [], 'remote' => [], 'public' => false, 'mail' => []];
} else {
$al = ['users' => [], 'remote' => false, 'public' => false];
$al = ['users' => [], 'remote' => false, 'public' => false, 'mail' => []];
}
if (!$this->userManager->userExists($owner)) {
return $al;

View File

@ -256,9 +256,10 @@ interface IManager {
* |-folder2 (32)
* |-fileA (42)
*
* fileA is shared with user1 and user1@server1
* fileA is shared with user1 and user1@server1 and email1@maildomain1
* folder2 is shared with group2 (user4 is a member of group2)
* folder1 is shared with user2 (renamed to "folder (1)") and user2@server2
* and email2@maildomain2
*
* Then the access list to '/folder1/folder2/fileA' with $currentAccess is:
* [
@ -272,15 +273,17 @@ interface IManager {
* 'user2@server2' => ['node_id' => 23, 'token' => 'FooBaR'],
* ],
* public => bool
* mail => bool
* ]
* mail => [
* 'email1@maildomain1' => ['node_id' => 42, 'token' => 'aBcDeFg'],
* 'email2@maildomain2' => ['node_id' => 23, 'token' => 'hIjKlMn'],
* ]
*
* The access list to '/folder1/folder2/fileA' **without** $currentAccess is:
* [
* users => ['user1', 'user2', 'user4'],
* remote => bool,
* public => bool
* mail => bool
* mail => ['email1@maildomain1', 'email2@maildomain2']
* ]
*
* This is required for encryption/activity