config = $config; $this->url = $url; $this->cache = $cache; $this->container=$container; } public function getCallbackSandbox() { if(null === $this->sandbox){ $sandboxCacheDir =$this->container->has('config.params.dirs.runtime.cache') ? rtrim($this->container->get('config.params.dirs.runtime.cache'), DIRECTORY_SEPARATOR) .DIRECTORY_SEPARATOR .'sbxp-parsed-php-vm-scripts'.DIRECTORY_SEPARATOR : @getenv('FRDL_WORKSPACE') .DIRECTORY_SEPARATOR. 'runtime' .DIRECTORY_SEPARATOR . 'cache' .DIRECTORY_SEPARATOR. 'sbxp-parsed-php-vm-scripts' .DIRECTORY_SEPARATOR; $this->sandbox = (new Webfan\Transform\TransformCallbacks()) ->setupCachepath($sandboxCacheDir) ->setupSandbox( $this->container->has('runtime.context.sandbox.containers') ? $this->container->get('runtime.context.sandbox.containers') : [ 'container'=>$this->container, ], $this->container->has('config.runtime.security.sandbox.allowed-functions') ? $this->container->get('config.runtime.security.sandbox.allowed-functions') : [], $this->container->has('config.sandbox.runtime.security.allowed-classes') ? $this->container->get('config.sandbox.runtime.security.allowed-classes') : [] ) ->overwriteTokenCallback([$this, 'sk']); } return $this->sandbox; } public function setTimeout(int $timeout): self { $this->timeout=$timeout; return $this; } public function sk($id) { return static::scriptKey($id); } public static function scriptKey($id) { return 'containerDefinitionCallback'.preg_replace("/([^A-Za-z0-9])/", '', $id).'S'.strlen($id).'H'.sha1($id); } protected function proxy($func) { switch($func){ case 'get' : if(null === $this->_proxy_get){ $factory = new ProxyManager\Factory\RemoteObjectFactory( new ProxyManager\Factory\RemoteObject\Adapter\JsonRpc( new Laminas\Json\Server\Client($this->url, //['timeout' => 60,] new Laminas\Http\Client( $this->url, [ 'timeout' => $this->timeout, ] ) ) ), $this->config ); $this->_proxy_get = $factory->createProxy(IO4FallbackContainer::class); } return $this->_proxy_get; break; case 'has' : if(null === $this->_proxy_has){ $factory = new ProxyManager\Factory\RemoteObjectFactory( new ProxyManager\Factory\RemoteObject\Adapter\JsonRpc( new Laminas\Json\Server\Client($this->url, //['timeout' => 60,] new Laminas\Http\Client( $this->url, [ 'timeout' => $this->timeout, ] ) ) ), $this->config ); $this->_proxy_has = $factory->createProxy(IO4FallbackContainer::class); } return $this->_proxy_has; break; } } public function transform($payload, string $id) { $payloadRAW = $payload; try { $payload = -1!==(new Webfan\Transform\UrlsafeBinaryTransform)->detect($payload) ? $payload : (new Webfan\Transform\UrlsafeBinaryTransform)->down($payload); } catch (Exception $error) { $payload = $payloadRAW; } try { $payload = -1!==(new Webfan\Transform\OpisTranform)->detect($payload) ? $payload : (new Webfan\Transform\OpisTranform)->down($payload); } catch (Exception $error) { $payload = $payloadRAW; } $payload = -1!==$this->getCallbackSandbox( )->detect($payload) ? $payload : $this->getCallbackSandbox( )->down(call_user_func(function($payload) use($id){ $payload['token']=$id; return $payload; },$payload)); /* if(!is_null($payload) && is_object($payload) && $payload instanceof Opis\Closure\SerializableClosure && null !== $this->container && is_callable([$this->container, 'createInvoker']) ){ // $invoker= $this->container->get('container')->createInvoker( ); // $payload =$invoker->call($payload, ['container'=>$this->container->get('container')]); $payload=call_user_func_array($payload , [$this->container]); }else*/if(!is_null($payload) && is_object($payload) && $payload instanceof Opis\Closure\SerializableClosure && null !== $this->container ){ $payload=call_user_func_array($payload , [$this->container]); } return $payload; } public function get($id) { if(isset($this->resolved[$id])){ return $this->resolved[$id]; } $key = 'IO4FallbackContainerClient.get.'.sha1($id).'.'.strlen($id); $remoteResult = $this->cache->get($key); /* try { $remoteResult = isset($remoteResult) ? $remoteResult : $this->proxy(__FUNCTION__)->containerGetHas('get', $id); } catch (\Laminas\Http\Client\Adapter\Exception\RuntimeException $error) { throw $error; } */ if(!$remoteResult){ $remoteResult = $this->proxy(__FUNCTION__)->containerGetHas('get', $id); if($remoteResult){ $this->cache->set($key, $remoteResult, 3 * 60 * 60); } } if($remoteResult){ $this->resolved[$id] = $this->transform($remoteResult, $id); }else{ } return $this->resolved[$id]; } public function has($id) { if(isset($this->resolved[$id])){ return true; } if(isset($this->_has[$id])){ return $this->_has[$id]; } try { $this->_has[$id] = $this->proxy('get')->containerGetHas('has', $id)['has']; } catch (Laminas\Http\Client\Adapter\Exception\RuntimeException $error) { throw $error; } return $this->_has[$id]; } } __halt_compiler();----SIGNATURE:----nECJ1GpyEn2EKe1NXWlafxnpybjyAEUC3xgBUG0YGgn1G4Uow2PFv1udAK6X5DLWuJc6Nyi0HQZNXWN8zOlbRuMMLjPImC4obp2GLDP6BcsD2CiGBiS49t7oQhVm3XjGrMqM8bv6WtVqESqCVEQgDG37VQ8n5ZhevBazG006tZfjZpI9GitUqzvMoSfW3r4ePb9MBDnFVi/Zq16+KQ56B5aA70qu7dPpxiA103OUWUDkhx10kkn9BqIQQIgYVIpFLGIvIMI8m5vPkmBdkN+ZCobF0NA3samxVS01QVQ61dNaNbSQzhTB8cIfeUj042HVv766yzrri1xeBuCt+QtC7Aa7DnukxsjDoAaub8JPsTfNGKPQS/xetaEaa0/csuSU25VvMJcYlK0Pjci4zj2uU2H0x6u0hf4Ctwhl4CV/Eo0pT9DAzhc9IiOUj/OnUq1fbKSOidElIcX4eP8uqHaD4Tx64TYExYcVZ+3AngGi+6MqBVY3KgK1WcUDPaZfUin/Dcg5XcSXzzR7SzNBPmml+BF6oPepZHEqUjb3wAT+rOE/F03AQ1mr6sdK5k0X5dbl7PKZXtfKTDn245nOyb+HAL+/sh8sEAbgrvr6k/R5aSxQSd8Mz36L8lcOcGV+e7NOrz1LYNhU1DKoywlEmtj0rAs8l55YpNb2j2G/bOt13wo=----ATTACHMENT:----NTYxNzM1NDQ0MzA2NDk5NyA2MjI4MzU0OTI2NTAxOTkyIDQxNTQzNjM0NzE4NDc2MTI=