From 1979c3f3183f27c086d6c04335f645071d54014c Mon Sep 17 00:00:00 2001 From: Sergio Brighenti Date: Sun, 19 Jun 2022 23:21:27 +0200 Subject: [PATCH] fixed discord video embedding --- app/Controllers/MediaController.php | 38 +++++++++++++++++--------- app/Web/UA.php | 3 +- app/helpers.php | 24 ++++++++++++++++ resources/templates/upload/public.twig | 16 +++++++++++ 4 files changed, 67 insertions(+), 14 deletions(-) diff --git a/app/Controllers/MediaController.php b/app/Controllers/MediaController.php index 3648796..e093c84 100644 --- a/app/Controllers/MediaController.php +++ b/app/Controllers/MediaController.php @@ -53,10 +53,6 @@ class MediaController extends Controller $userAgent = $request->getHeaderLine('User-Agent'); $mime = $filesystem->getMimetype($media->storage_path); - if (UA::isBot($userAgent) && !(UA::embedsLinks($userAgent) && isDisplayableImage($mime) && $this->getSetting('image_embeds') === 'on')) { - return $this->streamMedia($request, $response, $filesystem, $media); - } - try { $media->mimetype = $mime; $media->extension = pathinfo($media->filename, PATHINFO_EXTENSION); @@ -80,6 +76,22 @@ class MediaController extends Controller throw new HttpNotFoundException($request); } + if ( + UA::isBot($userAgent) && + !( + // embed if enabled + (UA::embedsLinks($userAgent) && + isEmbeddable($mime) && + $this->getSetting('image_embeds') === 'on') || + // if the file is too large to be displayed as non embedded + (UA::embedsLinks($userAgent) && + isEmbeddable($mime) && + $size >= (8 * 1024 * 1024)) + ) + ) { + return $this->streamMedia($request, $response, $filesystem, $media); + } + return view()->render($response, 'upload/public.twig', [ 'delete_token' => $token, 'media' => $media, @@ -133,9 +145,9 @@ class MediaController extends Controller $media = $this->getMedia($userCode, $mediaCode, false); if (!$media || (!$media->published && $this->session->get('user_id') !== $media->user_id && !$this->session->get( - 'admin', - false - ))) { + 'admin', + false + ))) { throw new HttpNotFoundException($request); } @@ -167,9 +179,9 @@ class MediaController extends Controller $media = $this->getMedia($userCode, $mediaCode, false); if (!$media || (!$media->published && $this->session->get('user_id') !== $media->user_id && !$this->session->get( - 'admin', - false - ))) { + 'admin', + false + ))) { throw new HttpNotFoundException($request); } @@ -373,9 +385,9 @@ class MediaController extends Controller $mime = $storage->getMimetype($media->storage_path); if ((param($request, 'width') !== null || param($request, 'height') !== null) && explode( - '/', - $mime - )[0] === 'image') { + '/', + $mime + )[0] === 'image') { return $this->makeThumbnail( $storage, $media, diff --git a/app/Web/UA.php b/app/Web/UA.php index 02b80dc..2e11918 100644 --- a/app/Web/UA.php +++ b/app/Web/UA.php @@ -19,8 +19,9 @@ class UA 'Slack' => false, 'Twitterbot/' => false, 'discord' => true, - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11.6; rv:92.0) Gecko/20100101 Firefox/92.0' => true // discord image bot + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11.6; rv:92.0) Gecko/20100101 Firefox/92.0' => true, + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Firefox/38.0' => true, ]; /** diff --git a/app/helpers.php b/app/helpers.php index a6f850c..a815951 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -73,6 +73,30 @@ if (!function_exists('isDisplayableImage')) { } } +if (!function_exists('isEmbeddable')) { + /** + * @param ?string $mime + * + * @return bool + */ + function isEmbeddable(?string $mime): bool + { + return in_array($mime, [ + 'image/apng', + 'image/bmp', + 'image/gif', + 'image/x-icon', + 'image/jpeg', + 'image/png', + 'image/tiff', + 'image/webp', + 'video/mp4', + 'video/ogg', + 'video/webm', + ]); + } +} + if (!function_exists('stringToBytes')) { /** * @param $str diff --git a/resources/templates/upload/public.twig b/resources/templates/upload/public.twig index c36b955..55b9778 100644 --- a/resources/templates/upload/public.twig +++ b/resources/templates/upload/public.twig @@ -19,6 +19,22 @@ + {% elseif type == 'video' %} + + + + + + + + + + + + + + + {% endif %} {% endblock %}