From 40349bfdc427dee9f5e65343a9ece4a18d0b3ee4 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 11 Oct 2020 23:25:29 +0200 Subject: [PATCH] Revert "IHTTPResult::getContentType is now a string again" This reverts commit 40b11442 --- src/Model/Photo.php | 2 +- src/Model/User.php | 2 +- src/Network/CurlResult.php | 6 +++--- src/Network/GuzzleResponse.php | 2 +- src/Network/IHTTPResult.php | 2 +- src/Network/Probe.php | 2 +- src/Util/Images.php | 18 ++++++++++-------- src/Util/ParseUrl.php | 8 +++++--- tests/src/Network/CurlResultTest.php | 8 ++++---- 9 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 5f8551fa27..dc60f25f37 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -427,7 +427,7 @@ class Photo $contType = $ret->getContentType(); } else { $img_str = ''; - $contType = ''; + $contType = []; } if ($quit_on_error && ($img_str == "")) { diff --git a/src/Model/User.php b/src/Model/User.php index e6f20f7387..48d9348961 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -1008,7 +1008,7 @@ class User $contType = $curlResult->getContentType(); } else { $img_str = ''; - $contType = ''; + $contType = []; } $type = Images::getMimeTypeByData($img_str, $photo, $contType); diff --git a/src/Network/CurlResult.php b/src/Network/CurlResult.php index 4ecdd68d10..ca1ead91d1 100644 --- a/src/Network/CurlResult.php +++ b/src/Network/CurlResult.php @@ -37,7 +37,7 @@ class CurlResult implements IHTTPResult private $returnCode; /** - * @var string the content type of the Curl call + * @var string[] the content type of the Curl call */ private $contentType; @@ -223,9 +223,9 @@ class CurlResult implements IHTTPResult private function checkInfo() { if (isset($this->info['content_type'])) { - $this->contentType = $this->info['content_type']; + $this->contentType = [$this->info['content_type']]; } else { - $this->contentType = ''; + $this->contentType = []; } } diff --git a/src/Network/GuzzleResponse.php b/src/Network/GuzzleResponse.php index 72d87ae9fe..69e88b4025 100644 --- a/src/Network/GuzzleResponse.php +++ b/src/Network/GuzzleResponse.php @@ -88,7 +88,7 @@ class GuzzleResponse extends Response implements IHTTPResult, ResponseInterface /** {@inheritDoc} */ public function getContentType() { - return implode($this->getHeader('Content-Type')); + return $this->getHeader('Content-Type'); } /** {@inheritDoc} */ diff --git a/src/Network/IHTTPResult.php b/src/Network/IHTTPResult.php index 38a1176284..acee2dde98 100644 --- a/src/Network/IHTTPResult.php +++ b/src/Network/IHTTPResult.php @@ -19,7 +19,7 @@ interface IHTTPResult /** * Returns the Content Type * - * @return string the Content Type + * @return string[] the Content Types */ public function getContentType(); diff --git a/src/Network/Probe.php b/src/Network/Probe.php index cfd0368439..14dcdea336 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -429,7 +429,7 @@ class Probe } // If it isn't a HTML file then exit - if (($curlResult->getContentType() != '') && !strstr(strtolower($curlResult->getContentType()), 'html')) { + if (!in_array('html', $curlResult->getContentType())) { return false; } diff --git a/src/Util/Images.php b/src/Util/Images.php index 1b52b91a13..f0aefb9f2c 100644 --- a/src/Util/Images.php +++ b/src/Util/Images.php @@ -75,23 +75,25 @@ class Images /** * Fetch image mimetype from the image data or guessing from the file name * - * @param string $image_data Image data - * @param string $filename File name (for guessing the type via the extension) - * @param string $mimeType possible mime type + * @param string $image_data Image data + * @param string $filename File name (for guessing the type via the extension) + * @param string[] $mimeTypes possible mime types * * @return string * @throws \Exception */ - public static function getMimeTypeByData(string $image_data, string $filename = '', string $mimeType = '') + public static function getMimeTypeByData(string $image_data, string $filename = '', array $mimeTypes = []) { - if (substr($mimeType, 0, 6) == 'image/') { - Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mimeType]); - return $mimeType; + foreach ($mimeTypes as $mimeType) { + if (substr($mimeType, 0, 6) == 'image/') { + Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mimeTypes]); + return $mimeType; + } } $image = @getimagesizefromstring($image_data); if (!empty($image['mime'])) { - Logger::info('Mime type detected via data', ['filename' => $filename, 'default' => $mimeType, 'mime' => $image['mime']]); + Logger::info('Mime type detected via data', ['filename' => $filename, 'default' => $mimeTypes, 'mime' => $image['mime']]); return $image['mime']; } diff --git a/src/Util/ParseUrl.php b/src/Util/ParseUrl.php index 1a81a256ca..ee2bedd1ee 100644 --- a/src/Util/ParseUrl.php +++ b/src/Util/ParseUrl.php @@ -166,7 +166,7 @@ class ParseUrl } // If it isn't a HTML file then exit - if (($curlResult->getContentType() != '') && !strstr(strtolower($curlResult->getContentType()), 'html')) { + if (!in_array('html', $curlResult->getContentType())) { return $siteinfo; } @@ -198,8 +198,10 @@ class ParseUrl $charset = ''; // Look for a charset, first in headers // Expected form: Content-Type: text/html; charset=ISO-8859-4 - if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $curlResult->getContentType(), $matches)) { - $charset = trim(trim(trim(array_pop($matches)), ';,')); + foreach ($curlResult->getContentType() as $type) { + if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $type, $matches)) { + $charset = trim(trim(trim(array_pop($matches)), ';,')); + } } // Then in body that gets precedence diff --git a/tests/src/Network/CurlResultTest.php b/tests/src/Network/CurlResultTest.php index 03a5288124..4bc066b800 100644 --- a/tests/src/Network/CurlResultTest.php +++ b/tests/src/Network/CurlResultTest.php @@ -68,7 +68,7 @@ class CurlResultTest extends TestCase $this->assertFalse($curlResult->isRedirectUrl()); $this->assertSame($headerArray, $curlResult->getHeaders()); $this->assertSame($body, $curlResult->getBody()); - $this->assertSame('text/html; charset=utf-8', $curlResult->getContentType()); + $this->assertSame(['text/html; charset=utf-8'], $curlResult->getContentType()); $this->assertSame('https://test.local', $curlResult->getUrl()); $this->assertSame('https://test.local', $curlResult->getRedirectUrl()); } @@ -97,7 +97,7 @@ class CurlResultTest extends TestCase $this->assertTrue($curlResult->isRedirectUrl()); $this->assertSame($headerArray, $curlResult->getHeaders()); $this->assertSame($body, $curlResult->getBody()); - $this->assertSame('text/html; charset=utf-8', $curlResult->getContentType()); + $this->assertSame(['text/html; charset=utf-8'], $curlResult->getContentType()); $this->assertSame('https://test.local/test/it', $curlResult->getUrl()); $this->assertSame('https://test.other/test/it', $curlResult->getRedirectUrl()); } @@ -124,7 +124,7 @@ class CurlResultTest extends TestCase $this->assertFalse($curlResult->isRedirectUrl()); $this->assertSame($headerArray, $curlResult->getHeaders()); $this->assertSame($body, $curlResult->getBody()); - $this->assertSame('text/html; charset=utf-8', $curlResult->getContentType()); + $this->assertSame(['text/html; charset=utf-8'], $curlResult->getContentType()); $this->assertSame('https://test.local/test/it', $curlResult->getRedirectUrl()); $this->assertSame('Tested error', $curlResult->getError()); } @@ -152,7 +152,7 @@ class CurlResultTest extends TestCase $this->assertTrue($curlResult->isRedirectUrl()); $this->assertSame($headerArray, $curlResult->getHeaders()); $this->assertSame($body, $curlResult->getBody()); - $this->assertSame('text/html; charset=utf-8', $curlResult->getContentType()); + $this->assertSame(['text/html; charset=utf-8'], $curlResult->getContentType()); $this->assertSame('https://test.local/test/it?key=value', $curlResult->getUrl()); $this->assertSame('https://test.other/some/?key=value', $curlResult->getRedirectUrl()); }