Skip to content

Commit 76281fc

Browse files
committed
fixing moderator overview on reshares
Signed-off-by: Maxence Lange <[email protected]>
1 parent f5d1365 commit 76281fc

3 files changed

Lines changed: 48 additions & 16 deletions

File tree

apps/files_sharing/lib/Controller/ShareAPIController.php

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@
4444
*/
4545
namespace OCA\Files_Sharing\Controller;
4646

47+
use OCA\Files\Helper;
4748
use OCA\Files_Sharing\Exceptions\SharingRightsException;
4849
use OCA\Files_Sharing\External\Storage;
49-
use OCA\Files\Helper;
5050
use OCP\App\IAppManager;
5151
use OCP\AppFramework\Http\DataResponse;
5252
use OCP\AppFramework\OCS\OCSBadRequestException;
@@ -56,9 +56,9 @@
5656
use OCP\AppFramework\OCSController;
5757
use OCP\AppFramework\QueryException;
5858
use OCP\Constants;
59+
use OCP\Files\Folder;
5960
use OCP\Files\InvalidPathException;
6061
use OCP\Files\IRootFolder;
61-
use OCP\Files\Folder;
6262
use OCP\Files\Node;
6363
use OCP\Files\NotFoundException;
6464
use OCP\IConfig;
@@ -71,12 +71,12 @@
7171
use OCP\IUserManager;
7272
use OCP\Lock\ILockingProvider;
7373
use OCP\Lock\LockedException;
74-
use OCP\Share;
7574
use OCP\Share\Exceptions\GenericShareException;
7675
use OCP\Share\Exceptions\ShareNotFound;
7776
use OCP\Share\IManager;
7877
use OCP\Share\IShare;
7978
use OCP\UserStatus\IManager as IUserStatusManager;
79+
use Psr\Log\LoggerInterface;
8080

8181
/**
8282
* Class Share20OCS
@@ -95,6 +95,8 @@ class ShareAPIController extends OCSController {
9595
private $rootFolder;
9696
/** @var IURLGenerator */
9797
private $urlGenerator;
98+
/** @var LoggerInterface */
99+
private $logger;
98100
/** @var string */
99101
private $currentUser;
100102
/** @var IL10N */
@@ -122,6 +124,7 @@ class ShareAPIController extends OCSController {
122124
* @param IUserManager $userManager
123125
* @param IRootFolder $rootFolder
124126
* @param IURLGenerator $urlGenerator
127+
* @param LoggerInterface $logger ,
125128
* @param string $userId
126129
* @param IL10N $l10n
127130
* @param IConfig $config
@@ -137,6 +140,7 @@ public function __construct(
137140
IUserManager $userManager,
138141
IRootFolder $rootFolder,
139142
IURLGenerator $urlGenerator,
143+
LoggerInterface $logger,
140144
string $userId = null,
141145
IL10N $l10n,
142146
IConfig $config,
@@ -153,6 +157,7 @@ public function __construct(
153157
$this->request = $request;
154158
$this->rootFolder = $rootFolder;
155159
$this->urlGenerator = $urlGenerator;
160+
$this->logger = $logger;
156161
$this->currentUser = $userId;
157162
$this->l = $l10n;
158163
$this->config = $config;
@@ -523,7 +528,7 @@ public function createShare(
523528
$share->setSharedWith($shareWith);
524529
$share->setPermissions($permissions);
525530
} elseif ($shareType === IShare::TYPE_LINK
526-
|| $shareType === IShare::TYPE_EMAIL) {
531+
|| $shareType === IShare::TYPE_EMAIL) {
527532

528533
// Can we even share links?
529534
if (!$this->shareManager->shareApiAllowLinks()) {
@@ -542,9 +547,9 @@ public function createShare(
542547
}
543548

544549
$permissions = Constants::PERMISSION_READ |
545-
Constants::PERMISSION_CREATE |
546-
Constants::PERMISSION_UPDATE |
547-
Constants::PERMISSION_DELETE;
550+
Constants::PERMISSION_CREATE |
551+
Constants::PERMISSION_UPDATE |
552+
Constants::PERMISSION_DELETE;
548553
} else {
549554
$permissions = Constants::PERMISSION_READ;
550555
}
@@ -1742,7 +1747,7 @@ private function shareProviderResharingRights(string $userId, IShare $share, $no
17421747
}
17431748

17441749
if ($share->getShareType() === IShare::TYPE_CIRCLE && \OC::$server->getAppManager()->isEnabledForUser('circles')
1745-
&& class_exists('\OCA\Circles\Api\v1\Circles')) {
1750+
&& class_exists('\OCA\Circles\CirclesManager')) {
17461751
$hasCircleId = (substr($share->getSharedWith(), -1) === ']');
17471752
$shareWithStart = ($hasCircleId ? strrpos($share->getSharedWith(), '[') + 1 : 0);
17481753
$shareWithLength = ($hasCircleId ? -1 : strpos($share->getSharedWith(), ' '));
@@ -1752,12 +1757,30 @@ private function shareProviderResharingRights(string $userId, IShare $share, $no
17521757
$sharedWith = substr($share->getSharedWith(), $shareWithStart, $shareWithLength);
17531758
}
17541759
try {
1755-
$member = \OCA\Circles\Api\v1\Circles::getMember($sharedWith, $userId, 1);
1756-
if ($member->getLevel() >= 4) {
1757-
return true;
1760+
// TODO: switch to ICirclesManager once we have it available within core
1761+
/** @var \OCA\Circles\CirclesManager $circleManager */
1762+
$circleManager = $this->serverContainer->get('\OCA\Circles\CirclesManager');
1763+
$circleManager->startSuperSession();
1764+
1765+
// We get the federatedUser linked to the userId (local user, so type=1)
1766+
// We browse the federatedUser's membership to confirm it exists and level is moderator
1767+
$federatedUser = $circleManager->getFederatedUser($userId, 1);
1768+
foreach($federatedUser->getMemberships() as $membership) {
1769+
if ($membership->getCircleId() === $sharedWith) {
1770+
return ($membership->getLevel() >= 4);
1771+
}
17581772
}
1759-
return false;
1760-
} catch (QueryException $e) {
1773+
} catch (\Exception $e) {
1774+
$this->logger->info(
1775+
'Exception while confirming resharing rights visibility',
1776+
[
1777+
'userId' => $userId,
1778+
'sharedWith' => $sharedWith,
1779+
'nodeId' => $node->getId(),
1780+
'exception' => $e,
1781+
]
1782+
);
1783+
17611784
return false;
17621785
}
17631786
}

apps/files_sharing/tests/Controller/ShareAPIControllerTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
use OCP\Share\Exceptions\GenericShareException;
6161
use OCP\Share\IManager;
6262
use OCP\Share\IShare;
63+
use Psr\Log\LoggerInterface;
6364
use Test\TestCase;
6465
use OCP\UserStatus\IManager as IUserStatusManager;
6566

@@ -92,6 +93,9 @@ class ShareAPIControllerTest extends TestCase {
9293
/** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
9394
private $urlGenerator;
9495

96+
/** @var LoggerInterface|\PHPUnit\Framework\MockObject\MockObject */
97+
private $loggerInterface;
98+
9599
/** @var string|\PHPUnit\Framework\MockObject\MockObject */
96100
private $currentUser;
97101

@@ -130,6 +134,7 @@ protected function setUp(): void {
130134
$this->request = $this->createMock(IRequest::class);
131135
$this->rootFolder = $this->createMock(IRootFolder::class);
132136
$this->urlGenerator = $this->createMock(IURLGenerator::class);
137+
$this->loggerInterface = $this->createMock(LoggerInterface::class);
133138
$this->currentUser = 'currentUser';
134139

135140
$this->l = $this->createMock(IL10N::class);
@@ -155,6 +160,7 @@ protected function setUp(): void {
155160
$this->userManager,
156161
$this->rootFolder,
157162
$this->urlGenerator,
163+
$this->loggerInterface,
158164
$this->currentUser,
159165
$this->l,
160166
$this->config,
@@ -178,6 +184,7 @@ private function mockFormatShare() {
178184
$this->userManager,
179185
$this->rootFolder,
180186
$this->urlGenerator,
187+
$this->loggerInterface,
181188
$this->currentUser,
182189
$this->l,
183190
$this->config,

build/psalm-baseline.xml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1543,11 +1543,13 @@
15431543
<RedundantCondition occurrences="1">
15441544
<code>$permissions &amp; Constants::PERMISSION_READ</code>
15451545
</RedundantCondition>
1546-
<UndefinedClass occurrences="2">
1547-
<code>\OCA\Circles\Api\v1\Circles</code>
1546+
<UndefinedClass occurrences="1">
15481547
<code>\OCA\Circles\Api\v1\Circles</code>
15491548
</UndefinedClass>
1550-
<UndefinedDocblockClass occurrences="4">
1549+
<UndefinedDocblockClass occurrences="7">
1550+
<code>$circleManager</code>
1551+
<code>$circleManager</code>
1552+
<code>$circleManager</code>
15511553
<code>$this-&gt;getRoomShareHelper()</code>
15521554
<code>$this-&gt;getRoomShareHelper()</code>
15531555
<code>$this-&gt;getRoomShareHelper()</code>

0 commit comments

Comments
 (0)