mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-24 03:42:32 +01:00
Merge image name cleaning functions
Updated testing for changes and to check existing of new expected file name. Related to #2611
This commit is contained in:
parent
c1f67372a7
commit
215c69acb2
@ -60,7 +60,7 @@ class ImageService
|
|||||||
int $resizeHeight = null,
|
int $resizeHeight = null,
|
||||||
bool $keepRatio = true
|
bool $keepRatio = true
|
||||||
) {
|
) {
|
||||||
$imageName = $this->sanitizeFileName($uploadedFile->getClientOriginalName());
|
$imageName = $uploadedFile->getClientOriginalName();
|
||||||
$imageData = file_get_contents($uploadedFile->getRealPath());
|
$imageData = file_get_contents($uploadedFile->getRealPath());
|
||||||
|
|
||||||
if ($resizeWidth !== null || $resizeHeight !== null) {
|
if ($resizeWidth !== null || $resizeHeight !== null) {
|
||||||
@ -139,7 +139,7 @@ class ImageService
|
|||||||
$name = str_replace(' ', '-', $name);
|
$name = str_replace(' ', '-', $name);
|
||||||
$nameParts = explode('.', $name);
|
$nameParts = explode('.', $name);
|
||||||
$extension = array_pop($nameParts);
|
$extension = array_pop($nameParts);
|
||||||
$name = implode('.', $nameParts);
|
$name = implode('-', $nameParts);
|
||||||
$name = Str::slug($name);
|
$name = Str::slug($name);
|
||||||
|
|
||||||
if (strlen($name) === 0) {
|
if (strlen($name) === 0) {
|
||||||
@ -426,15 +426,4 @@ class ImageService
|
|||||||
$basePath = ($this->storageUrl == false) ? url('/') : $this->storageUrl;
|
$basePath = ($this->storageUrl == false) ? url('/') : $this->storageUrl;
|
||||||
return rtrim($basePath, '/') . $filePath;
|
return rtrim($basePath, '/') . $filePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a sanitized filename with only one file extension
|
|
||||||
*/
|
|
||||||
private function sanitizeFileName(string $fileName): string
|
|
||||||
{
|
|
||||||
$parts = explode('.', $fileName);
|
|
||||||
$extension = array_pop($parts);
|
|
||||||
|
|
||||||
return sprintf('%s.%s', implode('-', $parts), $extension);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -167,25 +167,25 @@ class ImageTest extends TestCase
|
|||||||
|
|
||||||
public function test_files_with_double_extensions_will_get_sanitized()
|
public function test_files_with_double_extensions_will_get_sanitized()
|
||||||
{
|
{
|
||||||
$page = Page::first();
|
$page = Page::query()->first();
|
||||||
$admin = $this->getAdmin();
|
$admin = $this->getAdmin();
|
||||||
$this->actingAs($admin);
|
$this->actingAs($admin);
|
||||||
|
|
||||||
$fileName = 'bad.phtml.png';
|
$fileName = 'bad.phtml.png';
|
||||||
$relPath = $this->getTestImagePath('gallery', $fileName);
|
$relPath = $this->getTestImagePath('gallery', $fileName);
|
||||||
$this->deleteImage($relPath);
|
$expectedRelPath = dirname($relPath) . '/bad-phtml.png';
|
||||||
|
$this->deleteImage($expectedRelPath);
|
||||||
|
|
||||||
$file = $this->newTestImageFromBase64('bad-phtml-png.base64', $fileName);
|
$file = $this->newTestImageFromBase64('bad-phtml-png.base64', $fileName);
|
||||||
$upload = $this->withHeader('Content-Type', 'image/png')->call('POST', '/images/gallery', ['uploaded_to' => $page->id], [], ['file' => $file], []);
|
$upload = $this->withHeader('Content-Type', 'image/png')->call('POST', '/images/gallery', ['uploaded_to' => $page->id], [], ['file' => $file], []);
|
||||||
$upload->assertStatus(200);
|
$upload->assertStatus(200);
|
||||||
|
|
||||||
$lastImage = Image::query()->latest('id')->first();
|
$lastImage = Image::query()->latest('id')->first();
|
||||||
$newFileName = explode('.', basename($lastImage->path))[0];
|
|
||||||
|
|
||||||
$this->assertEquals($lastImage->name, 'bad-phtml.png');
|
$this->assertEquals('bad.phtml.png', $lastImage->name);
|
||||||
$this->assertFalse(file_exists(public_path($relPath)), 'Uploaded image file name was not stripped of dots');
|
$this->assertEquals('bad-phtml.png', basename($lastImage->path));
|
||||||
|
$this->assertFileNotExists(public_path($relPath), 'Uploaded image file name was not stripped of dots');
|
||||||
$this->assertTrue(strlen($newFileName) > 0, 'File name was reduced to nothing');
|
$this->assertFileExists(public_path($expectedRelPath));
|
||||||
|
|
||||||
$this->deleteImage($lastImage->path);
|
$this->deleteImage($lastImage->path);
|
||||||
}
|
}
|
||||||
|
@ -100,9 +100,8 @@ trait UsesImages
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete an uploaded image.
|
* Delete an uploaded image.
|
||||||
* @param $relPath
|
|
||||||
*/
|
*/
|
||||||
protected function deleteImage($relPath)
|
protected function deleteImage(string $relPath)
|
||||||
{
|
{
|
||||||
$path = public_path($relPath);
|
$path = public_path($relPath);
|
||||||
if (file_exists($path)) {
|
if (file_exists($path)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user