AuthShield = $AuthShield; $this->container=(null!==$container) ? $container : $AuthShield->getAppShield()->getContainer(); } public function auth(\UMA\JsonRpc\Request $request){ return 'admin' === $this->container->get('webfan.app.fsm.user')->getCurrentState()->getName(); } /** * {@inheritdoc} */ public function __invoke(\UMA\JsonRpc\Request $request): \UMA\JsonRpc\Response { $this->params = $request->params(); set_time_limit(300); $this->params->dir = rtrim($this->params->dir, \DIRECTORY_SEPARATOR.'/ '); $this->NODE_FILE = basename($this->params->url); if(!is_dir($this->params->dir)){ // return new \UMA\JsonRpc\Error($request->id(), sprintf('Directory %s does not exist', $this->params->dir)); mkdir($this->params->dir, 0755, true); } $AppShield = $this->AuthShield->getAppShield(); $config = $AppShield->config->export(); $this->cwd = getcwd(); chdir($this->params->dir); $i = $this->node_install(); chdir($this->cwd); if(true !== $i ){ return new \UMA\JsonRpc\Error($request->id(), $i); } $f = str_replace('.tar.gz', '', $this->NODE_FILE); $f = str_replace('.tar.xz', '', $f); $nodefile = $this->params->dir . \DIRECTORY_SEPARATOR . $f . \DIRECTORY_SEPARATOR .'bin'.\DIRECTORY_SEPARATOR.'node'; return new \UMA\JsonRpc\Success($request->id(), $nodefile); } protected function node_install() { $fp = fopen($this->NODE_FILE, "w"); flock($fp, \LOCK_EX); $curl = curl_init($this->params->url); curl_setopt($curl, \CURLOPT_HEADER, 0); curl_setopt($curl, \CURLOPT_FILE, $fp); $resp = curl_exec($curl); curl_close($curl); flock($fp, \LOCK_UN); fclose($fp); if(true !== $resp){ return 'Could not download '.$this->params->url.' to '.$this->NODE_FILE; } // $f = str_replace('.tar.gz', '', $this->NODE_FILE); // $f = str_replace('.tar.xz', '', $f); // passthru("tar -xzf " . $this->NODE_FILE . " 2>&1 && mv ". $f . " " . $this->params->dir . " && touch nodepid && rm -f " . $this->NODE_FILE, $ret, $out); passthru("tar -xzf " . $this->NODE_FILE . " && rm -f " . $this->NODE_FILE." 2>&1", $ret); if(0!==$ret){ return 'Could not install '.$this->NODE_FILE.' '.print_r($ret, true).' '.print_r($out, true); } // if(!file_exists($this->params->dir.\DIRECTORY_SEPARATOR.'bin'.\DIRECTORY_SEPARATOR.'node')){ // return 'Could not write node'; // } return true; } public function getSpec(): ?\stdClass { return \json_decode(<<<'JSON' { "$schema": "https://json-schema.org/draft-07/schema#", "type": ["object"], "properties": { "dir" : { type : ["string"] }, "url" : { type : ["string"] } }, "required" : ["dir", "url"], "additionalProperties": false } JSON ); } } __halt_compiler();----SIGNATURE:----a/uLMXDHfwMs/6QxK8p42oc3w+VJbLCbIngN2g5vWYnFFX7bopyrhiwdL6yfYwMWIQG1QRIiYuwtrN/DdpXyTbqY3n2mJJPKj1Q2G7W2m3xn7woKkYzEncvc4+UAJIpets5WMQwjpK/BrbQpXItoRhmis5emoRKq5X3PgfThs/ZitSlz6Fmxl8ej7ArZldECkQ7Vits93rKHhjqWE82js4iLb/iW/+Ff2TySpLi2gquKdMT34B5Sk5biruiIyxVlhRksnpemASdWSK+KqNbVCk/Lzla/6fKGUKg3o0hoJkEKt8s145DeXFrWaYx3yVFD4/KxI7c+d5NvfjNIMdgBMeuYgCL+cTNwkmyNfut+fl2teor+jFjndjCFJjgwmVEHgAKKHX7v7Rhw0VrPBqnYTkyqOW4wU6j/iI6PaSNlat5lLWfSKOnXX2BOM1XOn9Ot0dmSJci7am9IVC6tcxmwTXHHbZMLGR4C7PS602lXotvAKduY2cbW6tH0DgbxBnlnVax3AUPkejDqhoQlf7cChg0DSVfxw6eA400zJwstdVcUW67pKJ0wQh+ZnlSY2zcOGhsfuMOpWrWk0gg60tAFBDpI6HYlsYz3GZZCTBRV9Iym//9oQ4qzNe7Dm/w5vu+CeEJf5VQanQCDeoiVMIKmoaxivQr1nINXdeZnjies+GA=----ATTACHMENT:----MjQ2NjQwNTUxMTgzNjgwMiAyMTgyMTM5NzEzNzQ3NDcyIDUwODMxNDM1NjI3MDAwOA==