1
0
Fork 0

Revert "IHTTPResult::getContentType is now a string again"

This reverts commit 40b11442
This commit is contained in:
Philipp Holzer 2020-10-11 23:25:29 +02:00
parent 88c95a352b
commit 40349bfdc4
No known key found for this signature in database
GPG key ID: 9A28B7D4FF5667BD
9 changed files with 27 additions and 23 deletions

View file

@ -427,7 +427,7 @@ class Photo
$contType = $ret->getContentType(); $contType = $ret->getContentType();
} else { } else {
$img_str = ''; $img_str = '';
$contType = ''; $contType = [];
} }
if ($quit_on_error && ($img_str == "")) { if ($quit_on_error && ($img_str == "")) {

View file

@ -1008,7 +1008,7 @@ class User
$contType = $curlResult->getContentType(); $contType = $curlResult->getContentType();
} else { } else {
$img_str = ''; $img_str = '';
$contType = ''; $contType = [];
} }
$type = Images::getMimeTypeByData($img_str, $photo, $contType); $type = Images::getMimeTypeByData($img_str, $photo, $contType);

View file

@ -37,7 +37,7 @@ class CurlResult implements IHTTPResult
private $returnCode; private $returnCode;
/** /**
* @var string the content type of the Curl call * @var string[] the content type of the Curl call
*/ */
private $contentType; private $contentType;
@ -223,9 +223,9 @@ class CurlResult implements IHTTPResult
private function checkInfo() private function checkInfo()
{ {
if (isset($this->info['content_type'])) { if (isset($this->info['content_type'])) {
$this->contentType = $this->info['content_type']; $this->contentType = [$this->info['content_type']];
} else { } else {
$this->contentType = ''; $this->contentType = [];
} }
} }

View file

@ -88,7 +88,7 @@ class GuzzleResponse extends Response implements IHTTPResult, ResponseInterface
/** {@inheritDoc} */ /** {@inheritDoc} */
public function getContentType() public function getContentType()
{ {
return implode($this->getHeader('Content-Type')); return $this->getHeader('Content-Type');
} }
/** {@inheritDoc} */ /** {@inheritDoc} */

View file

@ -19,7 +19,7 @@ interface IHTTPResult
/** /**
* Returns the Content Type * Returns the Content Type
* *
* @return string the Content Type * @return string[] the Content Types
*/ */
public function getContentType(); public function getContentType();

View file

@ -429,7 +429,7 @@ class Probe
} }
// If it isn't a HTML file then exit // 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; return false;
} }

View file

@ -75,23 +75,25 @@ class Images
/** /**
* Fetch image mimetype from the image data or guessing from the file name * Fetch image mimetype from the image data or guessing from the file name
* *
* @param string $image_data Image data * @param string $image_data Image data
* @param string $filename File name (for guessing the type via the extension) * @param string $filename File name (for guessing the type via the extension)
* @param string $mimeType possible mime type * @param string[] $mimeTypes possible mime types
* *
* @return string * @return string
* @throws \Exception * @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/') { foreach ($mimeTypes as $mimeType) {
Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mimeType]); if (substr($mimeType, 0, 6) == 'image/') {
return $mimeType; Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mimeTypes]);
return $mimeType;
}
} }
$image = @getimagesizefromstring($image_data); $image = @getimagesizefromstring($image_data);
if (!empty($image['mime'])) { 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']; return $image['mime'];
} }

View file

@ -166,7 +166,7 @@ class ParseUrl
} }
// If it isn't a HTML file then exit // 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; return $siteinfo;
} }
@ -198,8 +198,10 @@ class ParseUrl
$charset = ''; $charset = '';
// Look for a charset, first in headers // Look for a charset, first in headers
// Expected form: Content-Type: text/html; charset=ISO-8859-4 // Expected form: Content-Type: text/html; charset=ISO-8859-4
if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $curlResult->getContentType(), $matches)) { foreach ($curlResult->getContentType() as $type) {
$charset = trim(trim(trim(array_pop($matches)), ';,')); if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $type, $matches)) {
$charset = trim(trim(trim(array_pop($matches)), ';,'));
}
} }
// Then in body that gets precedence // Then in body that gets precedence

View file

@ -68,7 +68,7 @@ class CurlResultTest extends TestCase
$this->assertFalse($curlResult->isRedirectUrl()); $this->assertFalse($curlResult->isRedirectUrl());
$this->assertSame($headerArray, $curlResult->getHeaders()); $this->assertSame($headerArray, $curlResult->getHeaders());
$this->assertSame($body, $curlResult->getBody()); $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->getUrl());
$this->assertSame('https://test.local', $curlResult->getRedirectUrl()); $this->assertSame('https://test.local', $curlResult->getRedirectUrl());
} }
@ -97,7 +97,7 @@ class CurlResultTest extends TestCase
$this->assertTrue($curlResult->isRedirectUrl()); $this->assertTrue($curlResult->isRedirectUrl());
$this->assertSame($headerArray, $curlResult->getHeaders()); $this->assertSame($headerArray, $curlResult->getHeaders());
$this->assertSame($body, $curlResult->getBody()); $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.local/test/it', $curlResult->getUrl());
$this->assertSame('https://test.other/test/it', $curlResult->getRedirectUrl()); $this->assertSame('https://test.other/test/it', $curlResult->getRedirectUrl());
} }
@ -124,7 +124,7 @@ class CurlResultTest extends TestCase
$this->assertFalse($curlResult->isRedirectUrl()); $this->assertFalse($curlResult->isRedirectUrl());
$this->assertSame($headerArray, $curlResult->getHeaders()); $this->assertSame($headerArray, $curlResult->getHeaders());
$this->assertSame($body, $curlResult->getBody()); $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('https://test.local/test/it', $curlResult->getRedirectUrl());
$this->assertSame('Tested error', $curlResult->getError()); $this->assertSame('Tested error', $curlResult->getError());
} }
@ -152,7 +152,7 @@ class CurlResultTest extends TestCase
$this->assertTrue($curlResult->isRedirectUrl()); $this->assertTrue($curlResult->isRedirectUrl());
$this->assertSame($headerArray, $curlResult->getHeaders()); $this->assertSame($headerArray, $curlResult->getHeaders());
$this->assertSame($body, $curlResult->getBody()); $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.local/test/it?key=value', $curlResult->getUrl());
$this->assertSame('https://test.other/some/?key=value', $curlResult->getRedirectUrl()); $this->assertSame('https://test.other/some/?key=value', $curlResult->getRedirectUrl());
} }