From 00f65ca725d063ced0801f1d221c3c630064612e Mon Sep 17 00:00:00 2001 From: Marc Jauvin Date: Fri, 26 Feb 2021 14:53:18 -0500 Subject: [PATCH] Honor cms.linkPolicy config in ImageResizer (#5401) --- modules/system/classes/ImageResizer.php | 16 ++++++++++-- .../unit/system/classes/ImageResizerTest.php | 26 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/modules/system/classes/ImageResizer.php b/modules/system/classes/ImageResizer.php index 6146d42c0..faf717873 100644 --- a/modules/system/classes/ImageResizer.php +++ b/modules/system/classes/ImageResizer.php @@ -499,7 +499,13 @@ class ImageResizer // Store the current configuration $this->storeConfig(); - return Url::to("/resizer/$identifier/$resizedUrl"); + $url = "/resizer/$identifier/$resizedUrl"; + + if (Config::get('cms.linkPolicy', 'detect') === 'force') { + $url = Url::to($url); + } + + return $url; } /** @@ -523,7 +529,13 @@ class ImageResizer // Ensure that a properly encoded URL is returned $segments = explode('/', $url); $lastSegment = array_pop($segments); - return implode('/', $segments) . '/' . rawurlencode(rawurldecode($lastSegment)); + $url = implode('/', $segments) . '/' . rawurlencode(rawurldecode($lastSegment)); + + if (Config::get('cms.linkPolicy', 'detect') === 'force') { + $url = Url::to($url); + } + + return $url; } /** diff --git a/tests/unit/system/classes/ImageResizerTest.php b/tests/unit/system/classes/ImageResizerTest.php index 7e4da1920..6bc97beed 100644 --- a/tests/unit/system/classes/ImageResizerTest.php +++ b/tests/unit/system/classes/ImageResizerTest.php @@ -335,6 +335,32 @@ class ImageResizerTest extends PluginTestCase $this->assertStringContainsString('october%20space', $imageResizer->getResizedUrl(), 'Resized URLs are not properly URL encoded'); } + public function testGetResizedUrl() + { + $imageResizer = new ImageResizer((new CmsController())->themeUrl('assets/images/october.png')); + + Config::set('cms.linkPolicy', 'force'); + $url = $imageResizer->getResizedUrl(); + $this->assertTrue(starts_with($url, 'http')); + + Config::set('cms.linkPolicy', 'detect'); + $url = $imageResizer->getResizedUrl(); + $this->assertTrue(starts_with($url, Config::get('cms.storage.resized.path', '/storage/app/resized'))); + } + + public function testGetResizerUrl() + { + $imageResizer = new ImageResizer((new CmsController())->themeUrl('assets/images/october.png')); + + Config::set('cms.linkPolicy', 'force'); + $url = $imageResizer->getResizerUrl(); + $this->assertTrue(starts_with($url, 'http')); + + Config::set('cms.linkPolicy', 'detect'); + $url = $imageResizer->getResizerUrl(); + $this->assertTrue(starts_with($url, '/resizer/')); + } + protected function setUpStorage() { $this->app->useStoragePath(base_path('storage/temp'));