Source of file CDNRewriteRequestFilter.php
Size: 4,146 Bytes - Last Modified: 2021-12-23T10:59:26+00:00
/var/www/docs.ssmods.com/process/src/code/CDNRewriteRequestFilter.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | <?php class CDNRewriteRequestFilter implements RequestFilter { /** * Enable rewriting of asset urls * @var bool */ private static $cdn_rewrite = false; /** * The cdn domain incl. protocol * @var string */ private static $cdn_domain = 'http://cdn.mysite.com'; /** * Enable rewrite in admin area * @var bool */ private static $enable_in_backend = false; /** * Enable rewrite in dev mode * @var bool */ private static $enable_in_dev = false; /** * should assets be rewritten? * @var bool */ private static $rewrite_assets = true; /** * should themes also be rewritten? * @var bool */ private static $rewrite_themes = false; /** * Filter executed before a request processes * * @param SS_HTTPRequest $request Request container object * @param Session $session Request session * @param DataModel $model Current DataModel * @return boolean Whether to continue processing other filters. Null or true will continue processing (optional) */ public function preRequest(SS_HTTPRequest $request, Session $session, DataModel $model) { return true; } /** * Filter executed AFTER a request * * @param SS_HTTPRequest $request Request container object * @param SS_HTTPResponse $response Response output object * @param DataModel $model Current DataModel * @return boolean Whether to continue processing other filters. Null or true will continue processing (optional) */ public function postRequest(SS_HTTPRequest $request, SS_HTTPResponse $response, DataModel $model) { if (!self::isEnabled()) { return true; } $body = $response->getBody(); $response->setBody(self::replaceCDN($body)); return true; } /** * Checks if cdn rewrite is enabled * @return bool */ public static function isEnabled() { $general = Config::inst()->get('CDNRewriteRequestFilter', 'cdn_rewrite'); $notDev = !Director::isDev() || Config::inst()->get('CDNRewriteRequestFilter', 'enable_in_dev'); $notBackend = !self::isBackend() || Config::inst()->get('CDNRewriteRequestFilter', 'enable_in_backend'); return $general && $notDev && $notBackend; } /** * Helper method to check if we're in backend (LeftAndMain) or frontend * Controller::curr() doesn't return anything, so i cannot check it... * @return bool */ public static function isBackend() { $url = array_key_exists('url', $_GET) ? $_GET['url'] : ''; return !Config::inst()->get('SSViewer', 'theme_enabled') || strpos($url, 'admin') === 1; } /** * replaces links to assets in src and href attributes to point to a given cdn domain * * @param $body * @return mixed|void */ public static function replaceCDN($body) { $cdn = Config::inst()->get('CDNRewriteRequestFilter', 'cdn_domain'); if (Config::inst()->get('CDNRewriteRequestFilter', 'rewrite_assets')) { $body = str_replace('src="assets/', 'src="' . $cdn . '/assets/', $body); $body = str_replace('src="/assets/', 'src="' . $cdn . '/assets/', $body); $body = str_replace('src=\"/assets/', 'src=\"' . $cdn . '/assets/', $body); $body = str_replace('href="/assets/', 'href="' . $cdn . '/assets/', $body); $body = str_replace(Director::absoluteBaseURL() . 'assets/', $cdn . '/assets/', $body); } if (Config::inst()->get('CDNRewriteRequestFilter', 'rewrite_themes')) { $body = str_replace('src="/themes/', 'src="' . $cdn . '/themes/', $body); $body = str_replace('src="' . Director::absoluteBaseURL() . 'themes/', 'src="' . $cdn . '/themes/', $body); $body = str_replace('href="/themes/', 'href="' . $cdn . '/themes/', $body); $body = str_replace('href="' . Director::absoluteBaseURL() . 'themes/', 'href="' . $cdn . '/themes/', $body); } return $body; } } |