# " !&AF |XA&A:ϘAA7 AA%ʫx,0ApABٔwA`A=D?{VAxArwȊA/A!)msȓAAZڠAA6wAվApApA&AEwHA&AC6}A8/Ar;pPوAAACAp}AjhA ºA!x܋H'AAB-Ǣ'AhAo@(AAcHZM(AA*A8A!l'@)AA _O$XA0AB UVqAxA#Up"8AAQ+AXADcJA͹AQwA +AAd*(ӕ%8`A`AZA A` A*PwH-Ap A䌢UB٥.A&AexwA&AEsPA@+ARlXA@ caU <baU` GbaU` HbaU` H|baU`p HRcaU ;caUP t@ caU <baU` GbaU` H|baU` p HRcaU ;caU!P t@ caU <baU` GbaU"` H|baU`"p HRcaU ;caU#P t@ caU <baU` GbaU$` H|baU`$p HRcaU ;caU%P t@ caU <baU` GbaU&` H|baU`&p HRcaU ;caU'P t@ caU <baU` GbaU(` H|baU`(p HRcaU ;caU)P t@ caU <baU` GbaU*` H|baU`*p HpbaUp+` GRcaU ;caU,P t@ caUp <baUp GRcaU- ;caU/P t@ caUp <baUp HbaU0 HEbaU13 q@ caU < baUp G5baU5p H|baUp6 HpbaU7p GRcaU ;caU8P t@ caU <_readable() in case of an open_basedir // or safe_mode failure. All we care about is whether or not we // can read it at this point. If the PHP environment is going to // panic over trying to see if the file can be read in the first // place, that is not helpful to us here. // See random_bytes_dev_urandom.php require_once $RandomCompatDIR.DIRECTORY_SEPARATOR.'random_bytes_dev_urandom.php'; } // Unset variables after use $RandomCompat_basedir = null; } else { $RandomCompatUrandom = false; } /** * mcrypt_create_iv() * * We only want to use mcypt_create_iv() if: * * - random_bytes() hasn't already been defined * - the mcrypt extensions is loaded * - One of these two conditions is true: * - We're on Windows (DIRECTORY_SEPARATOR !== '/') * - We're not on Windows and /dev/urandom is readabale * (i.e. we're not in a chroot jail) * - Special case: * - If we're not on Windows, but the PHP version is between * 5.6.10 and 5.6.12, we don't want to use mcrypt. It will * hang indefinitely. This is bad. * - If we're on Windows, we want to use PHP >= 5.3.7 or else * we get insufficient entropy errors. */ if ( !is_callable('random_bytes') && // Windows on PHP < 5.3.7 is broken, but non-Windows is not known to be. (DIRECTORY_SEPARATOR === '/' || PHP_VERSION_ID >= 50307) && // Prevent this code from hanging indefinitely on non-Windows; // see https://bugs.php.net/bug.php?id=69833 ( DIRECTORY_SEPARATOR !== '/' || (PHP_VERSION_ID <= 50609 || PHP_VERSION_ID >= 50613) ) && extension_loaded('mcrypt') ) { // See random_bytes_mcrypt.php require_once $RandomCompatDIR.DIRECTORY_SEPARATOR.'random_bytes_mcrypt.php'; } $RandomCompatUrandom = null; /** * This is a Windows-specific fallback, for when the mcrypt extension * isn't loaded. */ if ( !is_callable('random_bytes') && extension_loaded('com_dotnet') && class_exists('COM') ) { $RandomCompat_disabled_classes = preg_split( '#\s*,\s*#', strtolower(ini_get('disable_classes')) ); if (!in_array('com', $RandomCompat_disabled_classes)) { try { $RandomCompatCOMtest = new COM('CAPICOM.Utilities.1'); /** @psalm-suppress TypeDoesNotContainType */ if (is_callable(array($RandomCompatCOMtest, 'GetRandom'))) { // See random_bytes_com_dotnet.php require_once $RandomCompatDIR.DIRECTORY_SEPARATOR.'random_bytes_com_dotnet.php'; } } catch (com_exception $e) { // Don't try to use it. } } $RandomCompat_disabled_classes = null; $RandomCompatCOMtest = null; } /** * throw new Exception */ if (!is_callable('random_bytes')) { /** * We don't have any more options, so let's throw an exception right now * and hope the developer won't let it fail silently. * * @param mixed $length * @psalm-suppress InvalidReturnType * @throws Exception * @return string */ function random_bytes($length) { unset($length); // Suppress "variable not used" warnings. throw new Exception( 'There is no suitable CSPRNG installed on your system' ); return ''; } } } if (!is_callable('random_int')) { require_once $RandomCompatDIR.DIRECTORY_SEPARATOR.'random_int.php'; } $RandomCompatDIR = null; O>gpH5gT5gT5g@`5gpV5gR5gL5gR5g``5gp`5g`5g`5g`5g`5g`5g`5gQ5gU5gP5ga5ga5ga5ga5ga5g b5g J5g@b5g`b5ga5gP>gX5gp]5g ]5g@`5g `5g_5g\5gP`5g``5gp`5g`5g`5g`5g`5g`5g`5g@\5g _5gp^5ga5ga5ga5ga5ga5g b5gZ5g@b5g`b5ga5g`8g8Cj  77o1,gp-g,g 'dg.g~ ookooX.go(7=gkdg qf`dgg'fdgf@f0f@fdg:g7dgIfffhffg+gWf0hfgfg`fPfgp'fPff@gPg0ffPgfGdgpbfgf +gfP.fpg8gffu?gGf6dggpfGfcg f!gbffpffcgp f=g0+f`f'f0fdffOf=g@ f@g=gkdg@pf6dg=g0Hdgpgbf fRf f&fdg fg@fpIfff g6g=gfxf cgdgkdggg:dg@\ffV`f`f2f0 f@efdfP g`g=gpf@0f`;dg gvf`Zf0cf0Wgp}f=gEf@`f0 g%f(Hdg2fXf dfSf0fdgbf@qfqf`nfff+ggpcf* Returns an instance of ModuleRepository. * * @return ModuleRepository */ public function buildRepository() { if (null === self::$modulesRepository) { $sfContainer = SymfonyContainer::getInstance(); if (null !== $sfContainer) { self::$modulesRepository = $sfContainer->get('prestashop.core.admin.module.repository'); } else { self::$modulesRepository = new ModuleRepository( self::$moduleDataProvider, self::$adminModuleDataProvider, self::$cacheProvider, new HookManager(), _PS_MODULE_DIR_, Context::getContext()->language->id ); } } return self::$modulesRepository; } /** * @param bool $isDebug */ private function __construct(bool $isDebug = _PS_MODE_DEV_) { $this->isDebug = $isDebug; /** * If the Symfony container is available, it will be used for the other methods * build & buildRepository. No need to init manually all the dependancies. */ $sfContainer = SymfonyContainer::getInstance(); if (null !== $sfContainer) { return; } $yamlParser = new YamlParser((new Configuration())->get('_PS_CACHE_DIR_')); $prestashopAddonsConfig = $yamlParser->parse($this->getConfigDir() . '/addons/categories.yml'); $tools = new Tools(); $tools->refreshCaCertFile(); self::$translator = Context::getContext()->getTranslator(); $kernelDir = realpath($this->getConfigDir() . '/../../var'); $cacheDir = $kernelDir . ($this->isDebug ? '/cache/dev' : '/cache/prod'); self::$cacheProvider = new DoctrineProvider( new FilesystemAdapter( '', 0, $cacheDir . '/doctrine' ) ); $themeManagerBuilder = new ThemeManagerBuilder(Context::getContext(), Db::getInstance()); $themeName = Context::getContext()->shop->theme_name; $themeModules = $themeName ? $themeManagerBuilder->buildRepository()->getInstanceByName($themeName)->getModulesToEnable() : []; self::$legacyLogger = new LegacyLogger(); self::$categoriesProvider = new CategoriesProvider( $prestashopAddonsConfig['prestashop']['addons']['categories'], $themeModules ); self::$lecacyContext = new LegacyContext(); if (null === self::$adminModuleDataProvider) { self::$moduleDataProvider = new ModuleDataProvider(self::$legacyLogger, self::$translator); self::$adminModuleDataProvider = new AdminModuleDataProvider( self::$categoriesProvider, self::$moduleDataProvider, Context::getContext()->employee ); self::$adminModuleDataProvider->setRouter($this->getSymfonyRouter()); self::$translator = Context::getContext()->getTranslator(); self::$moduleDataUpdater = new ModuleDataUpdater(); } } /** * Returns an instance of \Symfony\Component\Routing\Router from Symfony scope into Legacy. * * @return \Symfony\Component\Routing\Router */ private function getSymfonyRouter() { // get the environment to load the good routing file $routeFileName = $this->isDebug === true ? 'routing_dev.yml' : 'routing.yml'; $routesDirectory = $this->getConfigDir(); $locator = new FileLocator([$routesDirectory]); $loader = new YamlFileLoader($locator); return new Router($loader, $routeFileName); } protected function getConfigDir() { return _PS_ROOT_DIR_ . '/app/config'; } }