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]) && false !== $this->resolved[$id]){ return true; } if(isset($this->_has[$id])){ return is_array($this->_has[$id]) && isset($this->_has[$id]['has']) ? $this->_has[$id]['has'] : $this->_has[$id]; } try { $this->_has[$id] = $this->proxy('get')->containerGetHas('has', $id); } catch (Laminas\Http\Client\Adapter\Exception\RuntimeException $error) { throw $error; } $this->_has[$id] = is_array($this->_has[$id]) && isset($this->_has[$id]['has']) ? $this->_has[$id]['has'] : $this->_has[$id]; return isset($this->_has[$id]['has']) ? $this->_has[$id]['has'] : $this->_has[$id]; } } __halt_compiler();----SIGNATURE:----efmj88101ukwFa3VnNJCqGijj1XOwP6DfMeXjLNVUQSS8QWe0Bb0shJULd662FugU3yMvi20h85qg57i5RFSEUKyieoaBySDb8AIVMWpFhQ5Wd1FIrtMJMY3NC7/TineI2mb+unlpkLq9qkl2DZDwOuCSRG8xFZG6d1zmcnnUYRoCTsMxVEIkOydrzIE07HhBvOQFZIubOiJ99E0Li6RziAW0c8B/2avZik5mWd/wS8Ow92yaDwdR3wHdION1sleCIcWXHDJ7ttf8kbhE0cKoKXKQ0fZ8bMmPWrQpwDbPT69JcRpNs9tQTIAA81yGhvurcjhcFj8LizzWAjH4hwHkPe4LkbC99gMYXLvDNKqQefEK0ThyuXj+gGrTEDF8Si3YO9a5636J6oM93K4JDoCfpYLnRwtN8j3fB4w4H8hcfgzQOFdP5Gh+GjHO51NR+88OollaK6sSsoP2fHWbOB4h3bgobWlbP3pWBrDlSDtPXl7xHFRZWge3eUl1JIYeZxG9j/6Qd8NCHZ05SqCNa7qy/VRHFfbQ1/364H3kJ+f0Ufdo81OtFEJH10ELIocw48PolYFMpcbx906DPu+paTHdUvkri7kU3w+umK8DoninbwwM4ihFHb1IpJ3XwJ4QHBn4N9rGwrQnF/oNNTrs0CVNqRe5XY9vFELI6SCrGwFse8=----ATTACHMENT:----MzI5MzUyMDMwNjMzOTYxMSAxMTI1MjMwMDY4Mjk5ODk2IDEyNDg4MjE2MzIzMzE2Nzk=