sync more data on GS

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
This commit is contained in:
Maxence Lange 2021-04-22 12:33:35 -01:00
parent cab81e3476
commit 7c0e514d04
4 changed files with 41 additions and 9 deletions

View file

@ -281,7 +281,7 @@ class CircleRequest extends CircleRequestBuilder {
* @throws CircleNotFoundException * @throws CircleNotFoundException
* @throws RequestBuilderException * @throws RequestBuilderException
*/ */
public function searchCircle(Circle $circle): Circle { public function searchCircle(Circle $circle, ?IFederatedUser $initiator = null): Circle {
$qb = $this->getCircleSelectSql(); $qb = $this->getCircleSelectSql();
$qb->leftJoinOwner(CoreRequestBuilder::CIRCLE); $qb->leftJoinOwner(CoreRequestBuilder::CIRCLE);
@ -300,6 +300,11 @@ class CircleRequest extends CircleRequestBuilder {
$qb->filterDirectMembership($aliasOwner, $circle->getOwner()); $qb->filterDirectMembership($aliasOwner, $circle->getOwner());
} }
if (!is_null($initiator)) {
$qb->setOptions([CoreRequestBuilder::CIRCLE], ['getData' => true]);
$qb->limitToInitiator(CoreRequestBuilder::CIRCLE, $initiator);
}
return $this->getItemFromRequest($qb); return $this->getItemFromRequest($qb);
} }

View file

@ -839,6 +839,7 @@ class FederatedUserService {
* @throws RemoteResourceNotFoundException * @throws RemoteResourceNotFoundException
* @throws SingleCircleNotFoundException * @throws SingleCircleNotFoundException
* @throws UnknownRemoteException * @throws UnknownRemoteException
* @throws RequestBuilderException
*/ */
public function getGroupCircle(string $groupId): Circle { public function getGroupCircle(string $groupId): Circle {
$group = $this->groupManager->get($groupId); $group = $this->groupManager->get($groupId);
@ -865,7 +866,7 @@ class FederatedUserService {
->setInitiator($member); ->setInitiator($member);
try { try {
return $this->circleRequest->searchCircle($circle); return $this->circleRequest->searchCircle($circle, $owner);
} catch (CircleNotFoundException $e) { } catch (CircleNotFoundException $e) {
} }

View file

@ -44,6 +44,7 @@ use OCA\Circles\Exceptions\FederatedItemException;
use OCA\Circles\Exceptions\InitiatorNotConfirmedException; use OCA\Circles\Exceptions\InitiatorNotConfirmedException;
use OCA\Circles\Exceptions\MemberNotFoundException; use OCA\Circles\Exceptions\MemberNotFoundException;
use OCA\Circles\Exceptions\OwnerNotFoundException; use OCA\Circles\Exceptions\OwnerNotFoundException;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Model\Federated\FederatedEvent; use OCA\Circles\Model\Federated\FederatedEvent;
@ -206,11 +207,13 @@ class RemoteDownstreamService {
* *
* @return bool * @return bool
* @throws OwnerNotFoundException * @throws OwnerNotFoundException
* @throws RequestBuilderException
*/ */
private function verifyCircle(FederatedEvent $event): bool { private function verifyCircle(FederatedEvent $event): bool {
$circle = $event->getCircle(); $circle = $event->getCircle();
try { try {
$localCircle = $this->circleRequest->getCircle($circle->getSingleId()); $localCircle = $this->circleRequest->getCircle($circle->getSingleId(), null, null, 0);
} catch (CircleNotFoundException $e) { } catch (CircleNotFoundException $e) {
return false; return false;
} }

View file

@ -53,7 +53,9 @@ use OCA\Circles\Exceptions\RemoteResourceNotFoundException;
use OCA\Circles\Exceptions\RequestBuilderException; use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Exceptions\SingleCircleNotFoundException; use OCA\Circles\Exceptions\SingleCircleNotFoundException;
use OCA\Circles\Exceptions\UnknownRemoteException; use OCA\Circles\Exceptions\UnknownRemoteException;
use OCA\Circles\FederatedItems\SingleMemberAdd;
use OCA\Circles\Model\Circle; use OCA\Circles\Model\Circle;
use OCA\Circles\Model\Federated\FederatedEvent;
use OCA\Circles\Model\FederatedUser; use OCA\Circles\Model\FederatedUser;
use OCA\Circles\Model\ManagedModel; use OCA\Circles\Model\ManagedModel;
use OCA\Circles\Model\Member; use OCA\Circles\Model\Member;
@ -87,6 +89,9 @@ class SyncService {
/** @var FederatedUserService */ /** @var FederatedUserService */
private $federatedUserService; private $federatedUserService;
/** @var federatedEventService */
private $federatedEventService;
/** @var MemberService */ /** @var MemberService */
private $memberService; private $memberService;
@ -102,8 +107,10 @@ class SyncService {
* *
* @param IUserManager $userManager * @param IUserManager $userManager
* @param IGroupManager $groupManager * @param IGroupManager $groupManager
* @param CircleRequest $circleRequest
* @param MemberRequest $memberRequest * @param MemberRequest $memberRequest
* @param FederatedUserService $federatedUserService * @param FederatedUserService $federatedUserService
* @param federatedEventService $federatedEventService
* @param MemberService $memberService * @param MemberService $memberService
* @param MembershipService $membershipService * @param MembershipService $membershipService
* @param ConfigService $configService * @param ConfigService $configService
@ -114,6 +121,7 @@ class SyncService {
CircleRequest $circleRequest, CircleRequest $circleRequest,
MemberRequest $memberRequest, MemberRequest $memberRequest,
FederatedUserService $federatedUserService, FederatedUserService $federatedUserService,
federatedEventService $federatedEventService,
MemberService $memberService, MemberService $memberService,
MembershipService $membershipService, MembershipService $membershipService,
ConfigService $configService ConfigService $configService
@ -123,6 +131,7 @@ class SyncService {
$this->circleRequest = $circleRequest; $this->circleRequest = $circleRequest;
$this->memberRequest = $memberRequest; $this->memberRequest = $memberRequest;
$this->federatedUserService = $federatedUserService; $this->federatedUserService = $federatedUserService;
$this->federatedEventService = $federatedEventService;
$this->memberService = $memberService; $this->memberService = $memberService;
$this->membershipService = $membershipService; $this->membershipService = $membershipService;
$this->configService = $configService; $this->configService = $configService;
@ -154,12 +163,15 @@ class SyncService {
} }
/**
* @return void
*/
public function syncAll(): void { public function syncAll(): void {
$this->syncNextcloudUsers(); $this->syncNextcloudUsers();
$this->syncNextcloudGroups();
$this->syncContacts();
$this->syncGlobalScale(); $this->syncGlobalScale();
$this->syncRemote(); $this->syncRemote();
$this->syncNextcloudGroups();
$this->syncContacts();
} }
@ -226,10 +238,15 @@ class SyncService {
$group = $this->groupManager->get($groupId); $group = $this->groupManager->get($groupId);
foreach ($group->getUsers() as $user) { foreach ($group->getUsers() as $user) {
$member = $this->generateGroupMember($circle, $user->getUID()); $member = $this->generateGroupMember($circle, $user->getUID());
$this->memberRequest->insertOrUpdate($member); $event = new FederatedEvent(SingleMemberAdd::class);
$event->setCircle($circle);
$event->setMember($member);
$this->federatedEventService->newEvent($event);
// $this->memberRequest->insertOrUpdate($member);
} }
$this->membershipService->onUpdate($circle->getSingleId()); // $this->membershipService->onUpdate($circle->getSingleId());
return $circle; return $circle;
} }
@ -336,9 +353,15 @@ class SyncService {
public function groupMemberAdded(string $groupId, string $userId): void { public function groupMemberAdded(string $groupId, string $userId): void {
$circle = $this->federatedUserService->getGroupCircle($groupId); $circle = $this->federatedUserService->getGroupCircle($groupId);
$member = $this->generateGroupMember($circle, $userId); $member = $this->generateGroupMember($circle, $userId);
$this->memberRequest->insertOrUpdate($member);
$this->membershipService->onUpdate($member->getSingleId()); $event = new FederatedEvent(SingleMemberAdd::class);
$event->setCircle($circle);
$event->setMember($member);
$this->federatedEventService->newEvent($event);
// $this->memberRequest->insertOrUpdate($member);
// $this->membershipService->onUpdate($member->getSingleId());
} }