*/ private $configuration; /** * @var ErrorHandlerInterface */ private $errorHandler; /** * @param \Context $context * @param PsAccountsAdapterService $psAccountsAdapterService * @param CurrencyRepository $currencyRepository * @param LanguageRepository $languageRepository * @param ConfigurationRepository $configurationRepository * @param ShopRepository $shopRepository * @param ErrorHandlerInterface $errorHandler * @param string $eventbusSyncApiUrl * @param string $eventbusLiveSyncApiUrl * @param string $eventbusProxyApiUrl * * @return void */ public function __construct( \Context $context, PsAccountsAdapterService $psAccountsAdapterService, CurrencyRepository $currencyRepository, LanguageRepository $languageRepository, ConfigurationRepository $configurationRepository, ShopRepository $shopRepository, ErrorHandlerInterface $errorHandler, $eventbusSyncApiUrl, $eventbusLiveSyncApiUrl, $eventbusProxyApiUrl ) { $this->currencyRepository = $currencyRepository; $this->languageRepository = $languageRepository; $this->configurationRepository = $configurationRepository; $this->shopRepository = $shopRepository; $this->context = $context; $this->db = \Db::getInstance(); $this->psAccountsAdapterService = $psAccountsAdapterService; $this->configuration = [ 'EVENT_BUS_SYNC_API_URL' => $eventbusSyncApiUrl, 'EVENT_BUS_LIVE_SYNC_API_URL' => $eventbusLiveSyncApiUrl, 'EVENT_BUS_PROXY_API_URL' => $eventbusProxyApiUrl, ]; $this->errorHandler = $errorHandler; } /** * @param string $langIso * * @return array[] * * @throws \PrestaShopException */ public function getServerInformation($langIso = '') { $langId = !empty($langIso) ? (int) \Language::getIdByIso($langIso) : null; /* This file is created on installation and never modified. As php doesn't allow to retrieve the creation date of a file or folder, we use the modification date of this file to get the installation date of the shop */ $filename = './img/admin/enabled.gif'; $folderCreatedAt = null; if (file_exists($filename)) { $folderCreatedAt = date('Y-m-d H:i:s', (int) filectime($filename)); } if ($this->context->link === null) { throw new \PrestaShopException('No link context'); } return [ [ 'id' => '1', 'collection' => Config::COLLECTION_SHOPS, 'properties' => [ 'created_at' => $this->shopRepository->getCreatedAt(), 'folder_created_at' => $folderCreatedAt, 'cms_version' => _PS_VERSION_, 'url_is_simplified' => $this->configurationRepository->get('PS_REWRITING_SETTINGS') == '1', 'cart_is_persistent' => $this->configurationRepository->get('PS_CART_FOLLOWING') == '1', 'default_language' => $this->languageRepository->getDefaultLanguageIsoCode(), 'languages' => implode(';', $this->languageRepository->getLanguagesIsoCodes()), 'default_currency' => $this->currencyRepository->getDefaultCurrencyIsoCode(), 'currencies' => implode(';', $this->currencyRepository->getCurrenciesIsoCodes()), 'weight_unit' => $this->configurationRepository->get('PS_WEIGHT_UNIT'), 'distance_unit' => $this->configurationRepository->get('PS_BASE_DISTANCE_UNIT'), 'volume_unit' => $this->configurationRepository->get('PS_VOLUME_UNIT'), 'dimension_unit' => $this->configurationRepository->get('PS_DIMENSION_UNIT'), 'timezone' => $this->configurationRepository->get('PS_TIMEZONE'), 'is_order_return_enabled' => $this->configurationRepository->get('PS_ORDER_RETURN') == '1', 'order_return_nb_days' => (int) $this->configurationRepository->get('PS_ORDER_RETURN_NB_DAYS'), 'php_version' => phpversion(), 'http_server' => isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : '', 'url' => $this->context->link->getPageLink('index', null, $langId), 'ssl' => $this->configurationRepository->get('PS_SSL_ENABLED') == '1', 'multi_shop_count' => $this->shopRepository->getMultiShopCount(), 'country_code' => $this->shopRepository->getShopCountryCode(), ], ], ]; } /** * @param bool $isAuthentifiedCall * * @return array */ public function getHealthCheckData($isAuthentifiedCall) { $tokenValid = false; $tokenIsSet = false; $allTablesInstalled = true; try { $token = $this->psAccountsAdapterService->getOrRefreshToken(); if ($token) { $tokenIsSet = true; $accountsClient = $this->getAccountsClient(); /** @phpstan-ignore-next-line */ $response = $accountsClient->verifyToken($token); if ($response && true === $response['status']) { $tokenValid = true; } } } catch (\Exception $e) { $this->errorHandler->handle($e); $tokenIsSet = false; } foreach (\Ps_eventbus::REQUIRED_TABLES as $requiredTable) { $query = new \DbQuery(); $query->select('*') ->from($requiredTable) ->limit(1); try { $this->db->executeS($query); } catch (\PrestaShopDatabaseException $e) { $allTablesInstalled = false; break; } } if (defined('PHP_VERSION') && defined('PHP_EXTRA_VERSION')) { $phpVersion = str_replace(PHP_EXTRA_VERSION, '', PHP_VERSION); } else { $phpVersion = (string) explode('-', (string) phpversion())[0]; } $sensibleInformation = [ 'prestashop_version' => _PS_VERSION_, 'ps_eventbus_version' => \Ps_eventbus::VERSION, 'ps_accounts_version' => defined('Ps_accounts::VERSION') ? \Ps_accounts::VERSION : false, /* @phpstan-ignore-line */ 'php_version' => $phpVersion, 'shop_id' => $this->psAccountsAdapterService->getShopUuid(), ]; $serverInformation = [ 'ps_account' => $tokenIsSet, 'is_valid_jwt' => $tokenValid, 'ps_eventbus' => $allTablesInstalled, 'env' => [ 'EVENT_BUS_PROXY_API_URL' => isset($this->configuration['EVENT_BUS_PROXY_API_URL']) ? $this->configuration['EVENT_BUS_PROXY_API_URL'] : null, 'EVENT_BUS_SYNC_API_URL' => isset($this->configuration['EVENT_BUS_SYNC_API_URL']) ? $this->configuration['EVENT_BUS_SYNC_API_URL'] : null, 'EVENT_BUS_LIVE_SYNC_API_URL' => isset($this->configuration['EVENT_BUS_LIVE_SYNC_API_URL']) ? $this->configuration['EVENT_BUS_LIVE_SYNC_API_URL'] : null, ], ]; if ($isAuthentifiedCall) { $serverInformation = array_merge($sensibleInformation, $serverInformation); } return $serverInformation; } /** * @return mixed */ private function getAccountsClient() { $module = \Module::getInstanceByName('ps_accounts'); /* @phpstan-ignore-next-line */ return $module->getService(AccountsClient::class); } }