<?php namespace Webfan\ElggPatch\Controller; class CDN { use \Webfan\Webfat\getWebfatTrait; const PFX_MODED = '~modified-by-webfan-webfat-cdn.v0.3.'; public function __construct() { $this->getWebfat(getcwd().\DIRECTORY_SEPARATOR.'webfat.php', true, false); } public function __invoke(\Elgg\Request $request) { global $CONFIG; $params = $request->getParams(); unset($params['_route']); foreach($_GET as $k => $v){ if(isset($params[$k]) && $params[$k] === $v) unset($params[$k]); } $params = array_values($params); $params = array_map( function($p){ return explode('?', $p )[0]; }, $params); $params = array_filter($params, function($p){ return !empty($p); }); $uri =explode('?', implode('/', $params ) )[0]; if(!str_contains(basename($uri), '.') ){ $uri.='.js'; } $dir = $CONFIG->assetroot; $dir = rtrim($dir, \DIRECTORY_SEPARATOR); $files = glob($dir.'/**/**/'.str_replace(['\\', '@'], [\DIRECTORY_SEPARATOR, \DIRECTORY_SEPARATOR], $uri)); if(0<count($files)){ $file = array_pop($files); $dir = dirname($file); $dir = rtrim($dir, \DIRECTORY_SEPARATOR); chmod($dir, 0775); $file_modified = $dir.\DIRECTORY_SEPARATOR.self::PFX_MODED.basename($file); $successWrite = false; if(!file_exists($file_modified) || filemtime($file_modified) < 24 * 60 * 60){ $c = file_get_contents($file); //require('jquery') $c = str_replace('require(\'jquery\')', 'window.jQuery', $c); //$(document) $c = str_replace('$(document)', 'window.jQuery(document)', $c); $successWrite = file_put_contents($file_modified, $c); }else{ $successWrite = true; } return \webfan\hps\patch\CacheHandler::init(true===$successWrite ? $file_modified : $file, '', $uri); } $url = 'https://cdn.startdir.de/'.$uri; $httpResult = $this->getWebfat()->getRemoteAutoloader()->transport($url, 'GET'); $status = (string)$httpResult->status; $body = $httpResult->body; if($status == '200' || substr($status,0,1)=='3'){ // \header_remove(); $mime =(new \Webfan\Webfat\App\KernelFunctions)->getMimeTypeByPath(basename($uri)); header('Content-Type: '.$mime); foreach($httpResult->headers as $header){ header($header); } $files = glob($dir.'/**/**/'.'require.js'); if(substr($status,0,1)!='3' && 0<count($files) && !empty($body)){ $file = array_pop($files); $dir = dirname($file); $dir = rtrim($dir, \DIRECTORY_SEPARATOR); chmod($dir, 0775); $file = $dir.\DIRECTORY_SEPARATOR.str_replace(['\\', '@'], [\DIRECTORY_SEPARATOR, \DIRECTORY_SEPARATOR], $uri); $dir = dirname($file); if(!is_dir($dir)){ mkdir($dir, 0775, true); }else{ chmod($dir, 0775); } $dir = dirname($file); $file_modified = $dir.\DIRECTORY_SEPARATOR.self::PFX_MODED.basename($file); $successWrite = file_put_contents($file_modified, $body); if($successWrite){ return \webfan\hps\patch\CacheHandler::init($file_modified, '', $uri); } }// if(substr($status,0,1)!='3' && 0<count($files)) return \webfan\hps\patch\CacheHandler::init($body, '', $uri); // return \elgg_ok_response($body); }// if($status == '200' || substr($status,0,1)=='3') return \elgg_ok_response(elgg_view_page('CDN asset not found', [ 'content' => 'Not found: '.$uri, // 'sidebar' => $sidebar, ])); } } __halt_compiler();----SIGNATURE:----XnUyT6EuY+ka1qsDH8jwRtXUICEBBP+bTWXnsvtiUrKSArAhFoRJ1GUU5lA/qdy1zWNLoD2VTS6DjC8RJkzxZCtgkdPt4UcpKmNrt3cQekw4171M0AqJtVZO94KjBBYnko4JzIwFIKX/dhWvSl11W+AZh2Sv4NsKVlhAqC+4eNv/ZAyEIfUxJLQfa15SRfhPRMoLVC/nLQxoDZsCc0NK1SjLeijsF+Ic9OzqhEJ0cp1F2voTTtjOryvGo1PzDcfQ62Y4C6pkOeMwpUocVcToMURTe4i7jBoMK+VocbO683eMJK+r280oegSpyD94DjMntacdpz+9OrAW5iXUOeBXp53crf2GtJ97y/gj1TtHrnyqtV/bozkx3i9lQIstlQtfetN7q2dqTiB4Nr2vDG3GlL/dwpXqI0ZFmgfg4EqwMs9M3HxLuNubzSMgB1E1kp6+XrqsQ4wbzGo15byRv8IqsHh+FlF/nru7Ei4jW0TYXoPgo1MegQywzOzYUiNIVDKUImzZGf8T0rK8Fj6YVbL3b2yvowjbs1lGCRVTdrlY++7iC/LATQNIztP71Mq0H24TQB9H8Z6s2CypChCnrOH/83I0MXM4VZIwi2wG3OooOYPtu5EE6U4eE/Q9S7zjsfm0tKCuqBd2Z5s2iOEtXswUqYugigk/gRShwlmyCEFfwFc=----ATTACHMENT:----MzA3OTgwNTYxODYxNDM5OSA2OTE0MjAxMDg3NDUyMjE2IDY2MjI2NjQzMzMwNjIwNzM=