<?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:----lXdHRV9X+oJj/MvhGvuGJFrXeGVemKk6GnFtWyvf6+bVtBso4SCjmWdW1JFisJ8BPCmkmQE+bP+pOF+LkWh7i44kUj3SRvgLrCfbyIhYaZ6wd8V5KrYa84WdSovRk5H+qkj7EG6B/Qox/KIIOhLEFVj4ZWdYA+2316B9F9+bq8cea2TOvl3zmPWr/zfMcraILHWVvmlO7YBHC4OY1mTfUrKP5DZHXNcN1gKidG0qHa4RPvXmij8RqqnN+rJmVPUcuZMWeIKfOXc5gHs8VsWDNG+FYDXGVjBsAP/D2DPckVvk9WizM9kny3RA+kaaLBl5hTd4Zmo8l5UJBAKAGq+C9GlcT91GJT3uB4XcFvq0D8+X5+a59ewEW20hIwFc4AI4KkYvqdPXIOmu6dIVK+MQPsLW6fWAfARx3z/QnfIOm1JkvJvjxubOtKYtX/Fal6dRhLoVVc8uPGAQg7lhLGUosBQuNsAbnZeVd753h6gQL/VsVP9CW73tbDSh2rcDMDHoI8Ou1MJpuL96p1DJOeG2QS9O7jcYC5xl/6CNfXImXZuYwD9LaTvlsj2TBpPmxOpZSVzQoWEzicSzPNLDIjdlB+xbwGCGrijE+N2xGia3ZdtnytN0MWDgdylRQt5Qy5Q2NSF/4Hu5P5UwoxqkZsF0cMFgAlqDh2mRQj+YMcxcrrI=----ATTACHMENT:----NjgyMTQ4OTczNjcxNjczOCAxNjc4Njg2MzgzNTI4MDMzIDQzOTQ4MzQxMjI3MDI2Mjg=