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 filterIP($ip = null){ if(null===$ip){ $ip = $_SERVER['REMOTE_ADDR']; } return preg_replace("/[^a-f0-9\.\:]/", "", \filter_var($ip, \FILTER_VALIDATE_IP)); } protected function _set($k,$v,&$config){ switch($k){ case 'workspace' : $p = explode('.', $v); if(3 !== count($p))return false; if(false === file_get_contents('https://'.preg_replace("/[^A-Za-z0-9\-\_\.\w]/", "", $v).'/cdn/application/webfan/node_modules/webfan/homepagesystem.app') && false === file_get_contents('http://'.preg_replace("/[^A-Za-z0-9\-\_\.\w]/", "", $v).'/cdn/application/webfan/node_modules/webfan/homepagesystem.app') ){ return false; } $config[$k] = preg_replace("/[^A-Za-z0-9\-\_\.\w]/", "", $v); break; case 'NPM_PATH' : exec(sprintf('%s help', preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v)), $out_wich, $status_wich); if($v && !$status_wich){ $config[$k] = preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v); }elseif(isset($config['NODE_PATH'])){ exec(sprintf('%s %s help', $config['NODE_PATH'], preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v)), $out_wich, $status_wich); if(!$status_wich){ $config[$k] = preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v); }else{ return false; } }elseif(false===$v || '' === $v){ $config[$k] = preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v); }else{ return false; } break; case 'FRDLJS_PATH' : exec(sprintf('%s help', preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v)), $out_wich, $status_wich); if($v && !$status_wich){ $config[$k] = preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v); }elseif(isset($config['NODE_PATH'])){ exec(sprintf('%s %s help', $config['NODE_PATH'], preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v)), $out_wich, $status_wich); if(!$status_wich){ $config[$k] = preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v); }else{ return false; } }elseif(false===$v || '' === $v){ $config[$k] = preg_replace("/[^A-Za-z0-9\-\_\.\/]/", "", $v); }else{ return false; } break; case 'NODE_PATH' : $AppShield = $this->AuthShield->getAppShield(); $tmpfname = tempnam($AppShield->getCacheDir(), 'node-test.js'); $js = << $this->container->get('.rand.str'),]); break; case 'wsdir' : $v = rtrim($v, \DIRECTORY_SEPARATOR.' ').\DIRECTORY_SEPARATOR; if(!is_dir($v) ){ mkdir($v, 0755, true); } if(is_dir($v) && @is_writable($v)){ $config['wsdir'] = $v; //$config['wsdir'] = \webfan\hps\patch\Fs::getRelativePath($this->AuthShield->getAppShield()->getStub()->location, $v); }else{ return false; } break; case 'ADMIN_EMAIL' : if(true !== \webfan\hps\Format\Validate::ismail($v) ){ return false; } $oldEmail = (isset( $config[$k])) ? $config[$k] : ''; $config[$k] = $v; $this->AuthShield->getAppShield()->getStub()->get_file($this->AuthShield->getAppShield()->getStub()->document, '$HOME/apc_config.php', 'stub apc_config.php')->to($v); $this->AuthShield->getAppShield()->getStub()->get_file($this->AuthShield->getAppShield()->getStub()->document, '$HOME/apc_config.php', 'stub apc_config.php')->from($v); if(($v !== $oldEmail || !isset($config['ADMIN_EMAIL_CONFIRMED']) || true !== $config['ADMIN_EMAIL_CONFIRMED']) && !empty($v) && true === \webfan\hps\Format\Validate::ismail($v)){ $confirmationCode = ($v === $oldEmail && isset($config['ADMIN_EMAIL_CONFIRMED']) && is_string($config['ADMIN_EMAIL_CONFIRMED'])) ? $config['ADMIN_EMAIL_CONFIRMED'] : $this->AuthShield->getAppShield()->getContainer()->get('.rand.str'); $config['ADMIN_EMAIL_CONFIRMED'] = $confirmationCode; $footer = 'Frdlweb Webfan PHP-Installer@'.((isset($_SERVER['SERVER_NAME']))?$_SERVER['SERVER_NAME']:$_SERVER['HTTP_HOST']); $link = $config['baseUrlInstaller'] . '?web=email-confirm.php&code='.$confirmationCode; //$p = explode('?', $_SERVER['REQUEST_URI']); //$path = $p[0]; $message = " Please confirm your E-Mail Address changing to `$v` by visiting the following link in your browser: $link $footer "; mail($v, "Confirm Admin-Email", $message); } break; case 'ADMIN_USERNAME' : $config[$k] = $v; break; case 'ADMIN_BROWSER_IP' : $config[$k] = $this->filterIP($v); break; case '__dummy' : default : // $config[$k] = $v; return false; break; } return true; } public function __invoke(\UMA\JsonRpc\Request $request): \UMA\JsonRpc\Response { set_time_limit(900); $params = $request->params(); $AppShield = $this->AuthShield->getAppShield(); $config = $AppShield->config->export(); $p = explode('?',$_SERVER['REQUEST_URI']); if(isset($config['baseUrlInstaller']) && is_string($config['baseUrlInstaller']) && !empty($config['baseUrlInstaller']) ){ $config['baseUrlInstaller'] = str_replace(basename($p[0]), basename($AppShield->getStub()->location), $config['baseUrlInstaller']); } try{ foreach($params as $key => $value){ if(!$this->_set($key,$value,$config)){ return new \UMA\JsonRpc\Error($request->id(), sprintf('Cannot set config `%s`',$key)); } } set_time_limit(900); $AppShield->setConfig($config, true, true); return new \UMA\JsonRpc\Success($request->id(), true); }catch(\Exception $e){ return new \UMA\JsonRpc\Error($request->id(), 'Cannot set config: '.$e->getMessage()); } } public function getSpec(): ?\stdClass { return \json_decode(<<<'JSON' { "$schema": "https://json-schema.org/draft-07/schema#", "type": ["object"], "properties": { }, "required" : [], "additionalProperties": true } JSON ); } } __halt_compiler();----SIGNATURE:----RgVq06g0MXbK24wWwtLcvT3y/b0SkKnMV1GOzIZBr5evh1ug4YQdrqRimIXuQ017iPCWzcRnGthanQdHd9CFftz5+BM1WxFc3OLW5Jx4lxk98VEvZcZjyrGZYoRkJwuWjW1RDYPpmOWq3IlMc9/a90jEJTf9CYDsomgU7ss0CuH5nMUZWTTVHh9AhiingMmaQUBQoE/trRjl5G2wLcnUiEs+a05ZVriQqNdsMAciGUtxhc4TDCqdPItXX/RGTwj3LkYI4HtI9RFR/gm3ci2hS6CylKkrV7QkGqlH4n7mLoa3kK9trSU39McK8mMET9xgrC31n4TqeNhT/59D8A/f8hhvDt3YEcXU8b3RpYdQWdaMZrJSZo6Tcm9T2hrM0jmmK2LAVWL1iK5nfzh2nEmzn1XwI+QLDh7up5bCeijQcmSQDtCVd675aEFg2Nnm2CADxD/raq5T469Aj5wRSutJWzwXGCBrXSeXamgjcakofcYMK+gURK4qji0/+dcs4Y5xlbfoboEnRz3juNNJ49Ohy3upeUyQTrz2korkoxnb+8Sa+RDk8uFsLmdt4Sc1g8awrPBgZFnhqdRgngvaxMVPgj+A0myruBAsWDnzNjBSMQYHfL2thOmN71fwBtkStYQVUpTC2TgDmjCs1cZJIVRr1L7hOjtyUDR1x+yag3GksyM=----ATTACHMENT:----ODc1NDkxOTE5MTgwNTU1NiA1NDI5MzMwODc0NTU2NTgzIDQ3MDE4NTc4OTMxNDMzNjU=