logger->error(sprintf( "OtAdmin API: an attempt was made to call the route " . $route . " from an non-allowed IP (" . $clientIp . ")")); throw new \RuntimeException("Not allowed"); } return true; } /** * Retrieve the organization's id from the given request parameters * * @param ServerRequest $request * @return int */ private function getOrganizationId(ServerRequest $request): int { $params = $request->getQueryParams(); $organizationId = $params['organization-id']; if (!$organizationId) { throw new \RuntimeException("Missing parameter: 'organization-id'"); } return (int)$organizationId; } /** * -- Target of the route 'site_infos' -- * * Return the main informations about the organization's website * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function getSiteInfosAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $infos = $controller->getSiteInfosAction($organizationId); return new JsonResponse($infos); } /** * -- Target of the route 'site_create' -- * >> Requires a query param named 'organization-id' (int) * * Create the organization's website * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function createSiteAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $rootUid = $controller->createSiteAction($organizationId); $this->logger->info(sprintf( "OtAdmin API: A new website has been created with root page uid=" . $rootUid . " for the organization " . $organizationId)); return new JsonResponse( [ 'organization_id' => $organizationId, 'msg' => "A new website has been created with root page uid=" . $rootUid, 'root_uid' => $rootUid ] ); } /** * -- Target of the route 'site_update' -- * >> Requires a query param named 'organization-id' (int) * * Update the settings of the organization's website * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function updateSiteConstantsAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $deep = (isset($queryParams['deep']) && $queryParams['deep']); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $rootUid = $controller->updateSiteAction($organizationId, $deep); $this->logger->info(sprintf( "OtAdmin API: The website with root uid " . $rootUid . " has been updated " . " (organization: " . $organizationId . ")")); return new JsonResponse( [ 'organization_id' => $organizationId, 'msg' => "The website with root uid " . $rootUid . " has been updated", 'root_uid' => $rootUid ] ); } /** * -- Target of the route 'site_delete' -- * >> Requires a query param named 'organization-id' (int) * * Proceeds to a soft-deletion of the organization's website * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function deleteSiteAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $params = $request->getQueryParams(); $redirectTo = isset($params['redirect-to']) ? $params['redirect-to'] : null; $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $rootUid = $controller->deleteSiteAction($organizationId, false, $redirectTo); $this->logger->info(sprintf( "OtAdmin API: The website with root uid " . $rootUid . " has been soft-deleted " . " (organization: " . $organizationId . ")")); return new JsonResponse( [ 'organization_id' => $organizationId, 'msg' => "The website with root uid " . $rootUid . " has been soft-deleted. Use the /site/undelete route to restore it.", 'root_uid' => $rootUid ] ); } /** * -- Target of the route 'site_undelete' -- * >> Requires a query param named 'organization-id' (int) * * Restore a soft-deleted organization's website * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function undeleteSiteAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $rootUid = $controller->undeleteSiteAction($organizationId); $this->logger->info(sprintf( "OtAdmin API: The website with root uid " . $rootUid . " has been restored " . " (organization: " . $organizationId . ")")); return new JsonResponse( [ 'organization_id' => $organizationId, 'msg' => "The website with root uid " . $rootUid . " has been restored", 'root_uid' => $rootUid ] ); } /** * -- Target of the route 'site_clearcache' -- * >> Requires a query param named 'organization-id' (int) * * Clear the cache of the organization's website * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function clearSiteCacheAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $rootUid = $controller->clearSiteCacheAction($organizationId); return new JsonResponse( [ 'organization_id' => $organizationId, 'msg' => "The cache has been cleared for the website with root uid " . $rootUid . "", 'root_uid' => $rootUid ] ); } /** * -- Target of the route 'site_setdomain' -- * >> Requires a query param named 'organization-id' (int) * * Set a new domain for the organization website * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function setSiteCustomDomainAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $queryParams = $request->getQueryParams(); $domain = $queryParams['domain']; if (!$domain) { throw new \RuntimeException("Missing 'domain' parameter"); } $redirect = (isset($queryParams['redirect']) && $queryParams['redirect']); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $rootUid = $controller->setSiteCustomDomainAction($organizationId, $domain, $redirect); return new JsonResponse( [ 'organization_id' => $organizationId, 'msg' => "The cache has been cleared for the website with root uid " . $rootUid . "", 'root_uid' => $rootUid ] ); } /** * -- Target of the route 'site_resetperms' -- * >> Requires a query param named 'organization-id' (int) * * Reset the permissions of the website be users (admin, editors...) * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function resetBeUserPermsAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $rootUid = $controller->resetBeUserPermsAction($organizationId); return new JsonResponse( [ 'organization_id' => $organizationId, 'msg' => "The website with root uid " . $rootUid . " had its be users permissions reset", 'root_uid' => $rootUid ] ); } /** * -- Target of the route 'site_reindex' -- * >> Requires a query param named 'organization-id' (int) * * Update the routing index for the given website * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function updateRoutingIndexAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $rootUid = $controller->updateRoutingIndexAction($organizationId); return new JsonResponse( [ 'organization_id' => $organizationId, 'msg' => "The website with root uid " . $rootUid . " routing index has been updated", 'root_uid' => $rootUid ] ); } /** * -- Target of the route 'site_status' -- * >> Requires a query param named 'organization-id' (int) * * Returns the current status of the website * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function getSiteStatusAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $organizationId = $this->getOrganizationId($request); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(SiteController::class); $queryParams = $request->getQueryParams(); $full = (isset($queryParams['full']) && $queryParams['full']); $status = $controller->getSiteStatusAction($organizationId, $full); return new JsonResponse($status->toArray()); } /** * -- Target of the route 'scan' -- * * Scan the whole Typo3 database and return the results * * @param ServerRequest $request * @return JsonResponse * @throws \Exception */ public function scanAllAction(ServerRequest $request): JsonResponse { $this->assertIpAllowed(); $controller = GeneralUtility::makeInstance(ObjectManager::class)->get(ScanController::class); $queryParams = $request->getQueryParams(); $full = (isset($queryParams['full']) && $queryParams['full']); $results = $controller->scanAllAction($full); return new JsonResponse($results); } }