Skip to content

Commit

Permalink
Merge pull request #32631 from nextcloud/feature/32629/getAccessList-…
Browse files Browse the repository at this point in the history
…share-by-email-recipients

Get access list share by email recipients
  • Loading branch information
AndyScherzinger authored Mar 25, 2024
2 parents c352f01 + f45eb75 commit 46906b7
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 14 deletions.
21 changes: 16 additions & 5 deletions apps/sharebymail/lib/ShareByMailProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -1098,21 +1098,32 @@ public function getAccessList($nodes, $currentAccess): array {
}

$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 {
Expand Down
14 changes: 9 additions & 5 deletions lib/private/Share20/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -1672,9 +1672,10 @@ public function userDeletedFromGroup($uid, $gid) {
* |-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:
* [
Expand All @@ -1688,15 +1689,18 @@ public function userDeletedFromGroup($uid, $gid) {
* '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
Expand All @@ -1716,9 +1720,9 @@ public function getAccessList(\OCP\Files\Node $path, $recursive = true, $current
$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;
Expand Down
11 changes: 7 additions & 4 deletions lib/public/Share/IManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -256,9 +256,10 @@ public function userDeletedFromGroup($uid, $gid);
* |-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:
* [
Expand All @@ -272,15 +273,17 @@ public function userDeletedFromGroup($uid, $gid);
* '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
Expand Down

0 comments on commit 46906b7

Please sign in to comment.