Move any circles API usage to internal service

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2021-12-29 16:09:24 +01:00
parent 2bbd572cb5
commit 6e89dd48bc
6 changed files with 60 additions and 50 deletions

View File

@@ -24,6 +24,7 @@
namespace OCA\Deck\Db; namespace OCA\Deck\Db;
use OC\Cache\CappedMemoryCache; use OC\Cache\CappedMemoryCache;
use OCA\Deck\Service\CirclesService;
use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\DoesNotExistException;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\IUserManager; use OCP\IUserManager;
@@ -36,10 +37,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
private $stackMapper; private $stackMapper;
private $userManager; private $userManager;
private $groupManager; private $groupManager;
private $circlesService;
private $logger; private $logger;
private $circlesEnabled; /** @var CappedMemoryCache */
private $userBoardCache; private $userBoardCache;
public function __construct( public function __construct(
@@ -49,6 +50,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
StackMapper $stackMapper, StackMapper $stackMapper,
IUserManager $userManager, IUserManager $userManager,
IGroupManager $groupManager, IGroupManager $groupManager,
CirclesService $circlesService,
LoggerInterface $logger LoggerInterface $logger
) { ) {
parent::__construct($db, 'deck_boards', Board::class); parent::__construct($db, 'deck_boards', Board::class);
@@ -57,12 +59,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
$this->stackMapper = $stackMapper; $this->stackMapper = $stackMapper;
$this->userManager = $userManager; $this->userManager = $userManager;
$this->groupManager = $groupManager; $this->groupManager = $groupManager;
$this->circlesService = $circlesService;
$this->logger = $logger; $this->logger = $logger;
$this->userBoardCache = new CappedMemoryCache(); $this->userBoardCache = new CappedMemoryCache();
$this->circlesEnabled = \OC::$server->getAppManager()->isEnabledForUser('circles');
} }
@@ -181,12 +181,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
} }
public function findAllByCircles($userId, $limit = null, $offset = null, $since = -1,$includeArchived = true) { public function findAllByCircles($userId, $limit = null, $offset = null, $since = -1,$includeArchived = true) {
if (!$this->circlesEnabled) { $circles = $this->circlesService->getUserCircles($userId);
return [];
}
$circles = array_map(function ($circle) {
return $circle->getUniqueId();
}, \OCA\Circles\Api\v1\Circles::joinedCircles($userId, true));
if (count($circles) === 0) { if (count($circles) === 0) {
return []; return [];
} }
@@ -277,11 +272,11 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
return null; return null;
} }
if ($acl->getType() === Acl::PERMISSION_TYPE_CIRCLE) { if ($acl->getType() === Acl::PERMISSION_TYPE_CIRCLE) {
if (!$this->circlesEnabled) { if (!$this->circlesService->isCirclesEnabled()) {
return null; return null;
} }
try { try {
$circle = \OCA\Circles\Api\v1\Circles::detailsCircle($acl->getParticipant(), true); $circle = $this->circlesService->getCircle($acl->getParticipant());
if ($circle) { if ($circle) {
return new Circle($circle); return new Circle($circle);
} }

View File

@@ -27,8 +27,11 @@ declare(strict_types=1);
namespace OCA\Deck\Service; namespace OCA\Deck\Service;
use OCA\Circles\CirclesManager; use OCA\Circles\CirclesManager;
use OCA\Circles\Model\Circle;
use OCA\Circles\Model\Member; use OCA\Circles\Model\Member;
use OCA\Circles\Model\Probes\CircleProbe;
use OCP\App\IAppManager; use OCP\App\IAppManager;
use Throwable;
/** /**
* Wrapper around circles app API since it is not in a public namespace so we need to make sure that * Wrapper around circles app API since it is not in a public namespace so we need to make sure that
@@ -45,15 +48,24 @@ class CirclesService {
return $this->circlesEnabled; return $this->circlesEnabled;
} }
public function getCircle($circleId) { public function getCircle(string $circleId): ?Circle {
if (!$this->circlesEnabled) { if (!$this->circlesEnabled) {
return null; return null;
} }
return \OCA\Circles\Api\v1\Circles::detailsCircle($circleId, true); try {
// Enforce current user condition since we always want the full list of members
/** @var CirclesManager $circlesManager */
$circlesManager = \OC::$server->get(CirclesManager::class);
$circlesManager->startSuperSession();
return $circlesManager->getCircle($circleId);
} catch (Throwable $e) {
}
return null;
} }
public function isUserInCircle($circleId, $userId): bool { public function isUserInCircle(string $circleId, string $userId): bool {
if (!$this->circlesEnabled) { if (!$this->circlesEnabled) {
return false; return false;
} }
@@ -66,8 +78,32 @@ class CirclesService {
$circle = $circlesManager->getCircle($circleId); $circle = $circlesManager->getCircle($circleId);
$member = $circle->getInitiator(); $member = $circle->getInitiator();
return $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER; return $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER;
} catch (\Exception $e) { } catch (Throwable $e) {
} }
return false; return false;
} }
/**
* @param string $userId
* @return string[] circle single ids
*/
public function getUserCircles(string $userId): array {
if (!$this->circlesEnabled) {
return [];
}
try {
/** @var CirclesManager $circlesManager */
$circlesManager = \OC::$server->get(CirclesManager::class);
$federatedUser = $circlesManager->getFederatedUser($userId, Member::TYPE_USER);
$circlesManager->startSession($federatedUser);
$probe = new CircleProbe();
$probe->mustBeMember();
return array_map(function (Circle $circle) {
return $circle->getSingleId();
}, $circlesManager->getCircles($probe));
} catch (Throwable $e) {
}
return [];
}
} }

View File

@@ -280,14 +280,14 @@ class PermissionService {
if ($this->circlesService->isCirclesEnabled() && $acl->getType() === Acl::PERMISSION_TYPE_CIRCLE) { if ($this->circlesService->isCirclesEnabled() && $acl->getType() === Acl::PERMISSION_TYPE_CIRCLE) {
try { try {
$circle = \OCA\Circles\Api\v1\Circles::detailsCircle($acl->getParticipant(), true); $circle = $this->circlesService->getCircle($acl->getParticipant());
if ($circle === null) { if ($circle === null) {
$this->logger->info('No circle found for acl rule ' . $acl->getId()); $this->logger->info('No circle found for acl rule ' . $acl->getId());
continue; continue;
} }
foreach ($circle->getInheritedMembers() as $member) { foreach ($circle->getInheritedMembers() as $member) {
if ($member->getUserType() !== 1 || $member->getLevel() >= Member::LEVEL_MEMBER) { if ($member->getUserType() !== 1 || $member->getLevel() < Member::LEVEL_MEMBER) {
// deck currently only supports user members in circles // deck currently only supports user members in circles
continue; continue;
} }

View File

@@ -105,10 +105,6 @@
<ParamNameMismatch occurrences="1"> <ParamNameMismatch occurrences="1">
<code>$boardId</code> <code>$boardId</code>
</ParamNameMismatch> </ParamNameMismatch>
<UndefinedClass occurrences="2">
<code>\OCA\Circles\Api\v1\Circles</code>
<code>\OCA\Circles\Api\v1\Circles</code>
</UndefinedClass>
</file> </file>
<file src="lib/Db/Card.php"> <file src="lib/Db/Card.php">
<UndefinedClass occurrences="2"> <UndefinedClass occurrences="2">
@@ -117,7 +113,6 @@
</UndefinedClass> </UndefinedClass>
</file> </file>
<file src="lib/Db/CardMapper.php"> <file src="lib/Db/CardMapper.php">
<InvalidArgument occurrences="1"/>
<InvalidScalarArgument occurrences="1"> <InvalidScalarArgument occurrences="1">
<code>$entity-&gt;getId()</code> <code>$entity-&gt;getId()</code>
</InvalidScalarArgument> </InvalidScalarArgument>
@@ -205,9 +200,11 @@
</file> </file>
<file src="lib/Service/CirclesService.php"> <file src="lib/Service/CirclesService.php">
<UndefinedClass occurrences="1"> <UndefinedClass occurrences="1">
<code>\OCA\Circles\Api\v1\Circles</code> <code>?Circle</code>
</UndefinedClass> </UndefinedClass>
<UndefinedDocblockClass occurrences="1"> <UndefinedDocblockClass occurrences="3">
<code>$circlesManager</code>
<code>$circlesManager</code>
<code>$circlesManager</code> <code>$circlesManager</code>
</UndefinedDocblockClass> </UndefinedDocblockClass>
</file> </file>
@@ -253,17 +250,16 @@
</RedundantCondition> </RedundantCondition>
</file> </file>
<file src="lib/Service/FilesAppService.php"> <file src="lib/Service/FilesAppService.php">
<MissingDependency occurrences="4"> <MissingDependency occurrences="3">
<code>$this-&gt;rootFolder</code> <code>$this-&gt;rootFolder</code>
<code>$this-&gt;rootFolder</code> <code>$this-&gt;rootFolder</code>
<code>IRootFolder</code> <code>IRootFolder</code>
<code>ShareNotFound</code>
</MissingDependency> </MissingDependency>
</file> </file>
<file src="lib/Service/PermissionService.php"> <file src="lib/Service/PermissionService.php">
<UndefinedClass occurrences="2"> <UndefinedClass occurrences="2">
<code>$circle</code>
<code>Member</code> <code>Member</code>
<code>\OCA\Circles\Api\v1\Circles</code>
</UndefinedClass> </UndefinedClass>
</file> </file>
<file src="lib/Service/StackService.php"> <file src="lib/Service/StackService.php">
@@ -271,27 +267,6 @@
<code>BadRquestException</code> <code>BadRquestException</code>
</UndefinedClass> </UndefinedClass>
</file> </file>
<file src="lib/Sharing/DeckShareProvider.php">
<InvalidReturnStatement occurrences="1">
<code>$shares</code>
</InvalidReturnStatement>
<InvalidReturnType occurrences="1">
<code>getSharesInFolder</code>
</InvalidReturnType>
<InvalidThrow occurrences="1">
<code>throw new GenericShareException('Already shared', $this-&gt;l-&gt;t('Path is already shared with this card'), 403);</code>
</InvalidThrow>
<MissingDependency occurrences="8">
<code>GenericShareException</code>
<code>GenericShareException</code>
<code>ShareNotFound</code>
<code>ShareNotFound</code>
<code>ShareNotFound</code>
<code>ShareNotFound</code>
<code>ShareNotFound</code>
<code>ShareNotFound</code>
</MissingDependency>
</file>
<file src="lib/Sharing/Listener.php"> <file src="lib/Sharing/Listener.php">
<InvalidArgument occurrences="1"> <InvalidArgument occurrences="1">
<code>[self::class, 'listenPreShare']</code> <code>[self::class, 'listenPreShare']</code>

View File

@@ -23,6 +23,7 @@
namespace OCA\Deck\Db; namespace OCA\Deck\Db;
use OCA\Deck\Service\CirclesService;
use OCP\IGroupManager; use OCP\IGroupManager;
use OCP\IUserManager; use OCP\IUserManager;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@@ -56,6 +57,7 @@ class AclMapperTest extends MapperTestUtility {
\OC::$server->query(StackMapper::class), \OC::$server->query(StackMapper::class),
$this->userManager, $this->userManager,
$this->groupManager, $this->groupManager,
$this->createMock(CirclesService::class),
$this->createMock(LoggerInterface::class) $this->createMock(LoggerInterface::class)
); );

View File

@@ -23,6 +23,7 @@
namespace OCA\Deck\Db; namespace OCA\Deck\Db;
use OCA\Deck\Service\CirclesService;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\IGroupManager; use OCP\IGroupManager;
use OCP\IUserManager; use OCP\IUserManager;
@@ -63,6 +64,7 @@ class BoardMapperTest extends MapperTestUtility {
\OC::$server->query(StackMapper::class), \OC::$server->query(StackMapper::class),
$this->userManager, $this->userManager,
$this->groupManager, $this->groupManager,
$this->createMock(CirclesService::class),
$this->createMock(LoggerInterface::class) $this->createMock(LoggerInterface::class)
); );
$this->aclMapper = \OC::$server->query(AclMapper::class); $this->aclMapper = \OC::$server->query(AclMapper::class);