acl->checkScope('ExternalAccount'); } public function getActionList(Request $request, Response $response): StdClass { $integrations = $this->entityManager->getRepository('Integration')->find(); $list = []; foreach ($integrations as $entity) { if ( $entity->get('enabled') && $this->metadata->get('integrations.' . $entity->id .'.allowUserAccounts') ) { $userAccountAclScope = $this->metadata ->get(['integrations', $entity->id, 'userAccountAclScope']); if ($userAccountAclScope) { if (!$this->acl->checkScope($userAccountAclScope)) { continue; } } $list[] = [ 'id' => $entity->getId(), ]; } } return (object) [ 'list' => $list ]; } public function getActionGetOAuth2Info(Request $request): ?StdClass { $id = $request->getQueryParam('id'); list($integration, $userId) = explode('__', $id); if ($this->user->getId() != $userId && !$this->user->isAdmin()) { throw new Forbidden(); } $entity = $this->entityManager->getEntity('Integration', $integration); if ($entity) { return (object) [ 'clientId' => $entity->get('clientId'), 'redirectUri' => $this->config->get('siteUrl') . '?entryPoint=oauthCallback', 'isConnected' => $this->getRecordService()->ping($integration, $userId) ]; } return null; } public function getActionRead(Request $request, Response $response): StdClass { $id = $request->getRouteParam('id'); return $this->getRecordService() ->read($id, ReadParams::create()) ->getValueMap(); } public function putActionUpdate(Request $request, Response $response): StdClass { $id = $request->getRouteParam('id'); $data = $request->getParsedBody(); list ($integration, $userId) = explode('__', $id); if ($this->user->getId() !== $userId && !$this->user->isAdmin()) { throw new Forbidden(); } if (isset($data->enabled) && !$data->enabled) { $data->data = null; } $entity = $this->entityManager->getEntity('ExternalAccount', $id); $entity->set($data); $this->entityManager->saveEntity($entity); return $entity->getValueMap(); } public function postActionAuthorizationCode(Request $request) { $data = $request->getParsedBody(); $id = $data->id; $code = $data->code; list ($integration, $userId) = explode('__', $id); if ($this->user->getId() != $userId && !$this->user->isAdmin()) { throw new Forbidden(); } $service = $this->getRecordService(); return $service->authorizationCode($integration, $userId, $code); } }