Try to detect if an external attachment is an image or not.

Before we assumed that it is a picture in all cases.
This commit is contained in:
Jan Böhmer 2023-07-29 18:50:18 +02:00
parent 1c222ff293
commit 15ba6572df
2 changed files with 14 additions and 3 deletions

View file

@ -144,9 +144,17 @@ abstract class Attachment extends AbstractNamedDBElement
*/ */
public function isPicture(): bool public function isPicture(): bool
{ {
//We can not check if an external link is a picture, so just assume this is false
if ($this->isExternal()) { if ($this->isExternal()) {
return true; //Check if we can extract a file extension from the URL
$extension = pathinfo(parse_url($this->path, PHP_URL_PATH) ?? '', PATHINFO_EXTENSION);
//If no extension is found or it is known picture extension, we assume that this is a picture extension
if ($extension === '' || in_array(strtolower($extension), static::PICTURE_EXTS, true)) {
return true;
}
//Otherwise we assume that the file is not a picture
return false;
} }
$extension = pathinfo($this->getPath(), PATHINFO_EXTENSION); $extension = pathinfo($this->getPath(), PATHINFO_EXTENSION);

View file

@ -182,8 +182,11 @@ class AttachmentTest extends TestCase
return [ return [
['%MEDIA%/foo/bar.txt', false], ['%MEDIA%/foo/bar.txt', false],
['https://test.de/picture.jpeg', true], ['https://test.de/picture.jpeg', true],
['https://test.de/picture.png?test=fdsj&width=34', true],
['https://invalid.invalid/file.txt', false],
['http://infsf.inda/file.zip?test', false],
['https://test.de', true], ['https://test.de', true],
['http://test.de/google.de', true], ['https://invalid.com/invalid/pic', true],
['%MEDIA%/foo/bar.jpeg', true], ['%MEDIA%/foo/bar.jpeg', true],
['%MEDIA%/foo/bar.webp', true], ['%MEDIA%/foo/bar.webp', true],
['%MEDIA%/foo', false], ['%MEDIA%/foo', false],