query: php:Webfan\CommonJavascript result: Found object: php:Webfan\CommonJavascript status: Information available name: CommonJavascript - Javascript-like AMD loader in PHP description: This is based on the idea of description: https://github.com/olivierphi/CommonJSForPHP description: (https://github.com/olivierphi/CommonJSForPHP) description: Config Example: description: $publicKeyChanged = false; description: $increaseTimelimit = true; description: $setPublicKey = function($baseUrl, $expFile, description: $pubKeyFile){ description: if(file_exists($expFile)){ description: $expires = intval(file_get_contents($expFile)); description: }else{ description: $expires = 0; description: } description: if(!is_dir(dirname($expFile))){ description: mkdir(dirname($expFile), 0755, true); description: } description: if(!is_dir(dirname($pubKeyFile))){ description: mkdir(dirname($pubKeyFile), 0755, true); description: } description: if($expires > 0 && ($expires === time() || description: ($expires > time() - 3 && $expires < time() + 3))){ description: sleep(3); description: } description: if($expires <= time() || description: !file_exists($pubKeyFile) ){ description: $opts =[ description: 'http'=>[ description: 'method'=>'GET', description: //'header'=>"Accept-Encoding: deflate, description: gzip\r\n", description: ], description: ]; description: $context = stream_context_create($opts); description: $key = description: file_get_contents($baseUrl.'?source=@server.key', false, description: $context); description: foreach($http_response_header as $i => description: $header){ description: $h = explode(':', $header); description: if('x-frdlweb-source-expires' === description: strtolower(trim($h[0]))){ description: file_put_contents($expFile, trim($h[1]) description: ); description: break; description: } description: } description: file_put_contents($pubKeyFile, $key); description: } description: }; description: $getDefaultValidatorForUrl = function($baseUrl, description: $cacheDir, $increaseTimelimit = true) use($setPublicKey, description: &$publicKeyChanged) { description: $expFile = rtrim($cacheDir, '\\/ ') . description: \DIRECTORY_SEPARATOR.'validator-'.sha1($baseUrl).strlen($baseUrl).'.expires.txt'; description: $pubKeyFile = rtrim($cacheDir, '\\/ ') . description: \DIRECTORY_SEPARATOR.'validator-'.sha1($baseUrl).strlen($baseUrl).'.public-key.txt'; description: $setPublicKey($baseUrl, $expFile, $pubKeyFile); description: $condition = function($url) use($baseUrl, description: $increaseTimelimit){ description: if($increaseTimelimit){ description: set_time_limit(min(180, description: intval(ini_get('max_execution_time')) + 90)); description: } description: if($baseUrl === substr($url, 0, strlen($baseUrl) description: ) ){ description: return true; description: }else{ description: return false; description: } description: }; description: $filter = function($code) use($baseUrl, description: $expFile, $pubKeyFile, $setPublicKey, &$publicKeyChanged) description: { description: $sep = 'X19oYWx0X2NvbXBpbGVyKCk7'; description: $my_signed_data=$code; description: $public_key = file_get_contents($pubKeyFile); description: list($plain_data,$sigdata) = description: explode(base64_decode($sep), $my_signed_data, 2); description: list($nullVoid,$old_sig_1) = description: explode("----SIGNATURE:----", $sigdata, 2); description: list($old_sig,$ATTACHMENT) = description: explode("----ATTACHMENT:----", $old_sig_1, 2); description: $old_sig = base64_decode($old_sig); description: $ATTACHMENT = base64_decode($ATTACHMENT); description: if(empty($old_sig)){ description: return new \Exception("ERROR -- unsigned description: data"); description: } description: \openssl_public_decrypt($old_sig, $decrypted_sig, description: $public_key); description: $data_hash = description: sha1($plain_data.$ATTACHMENT).substr(str_pad(strlen($plain_data.$ATTACHMENT).'', description: 128, strlen($plain_data.$ATTACHMENT) % 10, description: \STR_PAD_LEFT), 0, 128); description: if($decrypted_sig === $data_hash && description: strlen($data_hash)>0){ description: return $plain_data; description: }else{ description: if(!$publicKeyChanged){ description: $publicKeyChanged = true; description: unlink($pubKeyFile); description: unlink($expFile); description: $setPublicKey($baseUrl, $expFile, description: $pubKeyFile); description: } description: return new \Exception("ERROR -- untrusted description: signature"); description: } description: }; description: return [$condition, $filter]; description: }; description: $getDefaultValidators = function($cacheDir, description: $increaseTimelimit = true) description: use($getDefaultValidatorForUrl) { description: return [ description: description: $getDefaultValidatorForUrl('https://webfan.de/install/stable/', description: $cacheDir, $increaseTimelimit), description: description: $getDefaultValidatorForUrl('https://webfan.de/install/latest/', description: $cacheDir, $increaseTimelimit), description: description: $getDefaultValidatorForUrl('https://webfan.de/install/modules/', description: $cacheDir, $increaseTimelimit), description: ]; description: }; description: $commonJS description: =\Webfan\CommonJavascript::getInstance('default',[ description: 'tmpPath' => \sys_get_temp_dir(), description: // 'basePath' => __DIR__, description: 'basePath' =>[ description: description: $ContainerBuilder->getAppKernel()->getDir('modules'), description: getcwd(), description: description: 'https://webfan.de/install/modules/', description: description: 'https://webfan.de/install/stable/', description: description: 'https://webfan.de/install/latest/', description: ], description: 'modulesExt' => '.php', description: 'folderAsModuleFileName' => description: 'index.php', description: 'packageInfoFileName' => description: 'package.php', description: // 'autoNamespacing' => false, description: 'autoNamespacing' => true, description: 'autoNamespacingCacheExpires' => description: 24*60*60, description: 'validators' => description: $getDefaultValidators($ContainerBuilder->getAppKernel()->getDir('cache') description: description: .'prune-month'.\DIRECTORY_SEPARATOR, true), description: ], description: [ description: 'json' => __DIR__ . description: '/plugins/commonsjs-plugin.json.php', description: 'yaml' => __DIR__ . description: '/plugins/commonsjs-plugin.yaml.php', description: ] description: ); description: $commonJS['exec'] = function(\callable | description: \closure $callback, array $params = []) use(&$commonJS){ description: extract($commonJS); description: $args = [$define, $require, &$exports, description: &$module]; description: foreach($params as $param){ description: array_push($args, $param); description: } description: return call_user_func_array($callback, description: $args); description: }; description:   description: Usage Example: description: extract($commonJS); description: $define('logger', function($require) { description: return function($msg) { description: //syslog(LOG_DEBUG, $msg); description: print_r($msg); description: }; description: }); description: $logger = $require('logger'); description: $logger('Hihallihallo'); description: $test= $require('test'); description: print_r(array_merge([$App->getDir('modules')], [ description: $test, description: 'https://webfan.de/install/modules/', description: ])); description: //return; description: $exec(function($define, $require, &$exports, description: &$module, ...$args){ description: echo implode(' ', $args); description: }, ['Hello', ' ', 'World!']); url: https://webfan.de/apps/registry/?goto=php%3AWebfan%5CCommonJavascript canonical-identifier: oid:1.3.6.1.4.1.37476.30.9.1494410075.195901344 alternate-identifier: aid:D276000186B200055912E35B0BAD37A0 alternate-identifier: guid:5912e35b-4b41-8000-a6f0-107ea655ba36 alternate-identifier: mac:42-22-0B-AD-37-A0 alternate-identifier: mac:43-22-0B-AD-37-A0 alternate-identifier: oid:1.3.6.1.4.1.37476.30.9.1494410075.195901344 alternate-identifier: oid:1.3.6.1.4.1.37476.30.9.1494410075.195901344 alternate-identifier: x500dn:/dc=com/dc=example/cn=oidplus/1.3.6.1.4.1.37476.2.5.2.9.4.1=1494410075/1.3.6.1.4.1.37476.2.5.2.9.4.2=195901344 parent: php:Webfan created: 2022-09-30 10:48:55 updated: 2022-09-30 12:39:07 ra: Unknown ra-status: Information unavailable % -----BEGIN RSA SIGNATURE----- % BmVkYjtf9VbQmPfoDYFOOe21odJjFhMLXZefw5xaJTEKqmtcbQ4QJ/X0ENBn9vcRivFcHgtnxieq4+ % rYxt7ciTsYzYQ2Y/5ir7zhcbaazN3DjPVyWxHqxRgmjxFQYtGqUuslOshiDLQDL1erXcwTIfjXocd1 % jvp3Tol27NcJ9lmgVdjPkcDShmwVkJfq3JyAY+xURN6qRf/u/E+AA78Z22++waC3kORrVnpavLfgox % x3e0MS09uPXRxFky90cEqP8BGjbkmWJHPVHdd5c/QfBfKHDpaePA2VWJ4GbwCVGY9/4eh+D+hbDHXZ % ieMhf0vStpDhl7127Qs7IrD4OgeW2g== % -----END RSA SIGNATURE-----