summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Brahmer <info@b-brahmer.de>2023-08-25 09:37:29 +0200
committerGitHub <noreply@github.com>2023-08-25 09:37:29 +0200
commitb99320dd4aa9c5c732d331bd54d65e8010c4662d (patch)
tree83b50d3fe312224acfc1efed52187d47db3eedf3
parentcaf30017730cd610d4d02d1f3622a1ecf1b560ce (diff)
Check available compression types of curl (#2328)
Check an use available compression types of curl use compression when downloading feed logo Co-authored-by: Sean Molenaar <SMillerDev@users.noreply.github.com> Signed-off-by: Benjamin Brahmer <info@b-brahmer.de>
-rw-r--r--CHANGELOG.md1
-rw-r--r--lib/Config/FetcherConfig.php25
-rwxr-xr-xlib/Fetcher/FeedFetcher.php12
-rw-r--r--tests/Unit/Fetcher/FeedFetcherTest.php11
4 files changed, 41 insertions, 8 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 346a87e47..2f0581007 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@ The format is mostly based on [Keep a Changelog](https://keepachangelog.com/en/1
### Changed
- Drop support for Nextcloud 25, Supported: 26, 27 (#2316)
- Add a new command for occ `./occ news:updater:job` allows to check and reset the update job (#2166)
+- Check for available http(s) compression options and use them (gzip, deflate, brotli) (#2328)
### Fixed
# Releases
diff --git a/lib/Config/FetcherConfig.php b/lib/Config/FetcherConfig.php
index 797dae49e..702fccdf1 100644
--- a/lib/Config/FetcherConfig.php
+++ b/lib/Config/FetcherConfig.php
@@ -95,6 +95,29 @@ class FetcherConfig
}
/**
+ * Checks for available encoding options
+ *
+ * @return String list of supported encoding types
+ */
+ public function checkEncoding()
+ {
+ $supportedEncoding = [];
+
+ // check curl features
+ $curl_features = curl_version()["features"];
+
+ $bitfields = array('CURL_VERSION_LIBZ' => ['gzip', 'deflate'], 'CURL_VERSION_BROTLI' => ['br']);
+
+ foreach ($bitfields as $feature => $header) {
+ // checking available features via the 'features' bitmask and adding available types to the list
+ if (defined($feature) && $curl_features & constant($feature)) {
+ $supportedEncoding = array_merge($supportedEncoding, $header);
+ }
+ }
+ return implode(", ", $supportedEncoding);
+ }
+
+ /**
* Configure a guzzle client
*
* @return ClientInterface Client to guzzle.
@@ -106,7 +129,7 @@ class FetcherConfig
'headers' => [
'User-Agent' => static::DEFAULT_USER_AGENT,
'Accept' => static::DEFAULT_ACCEPT,
- 'Accept-Encoding' => 'gzip, deflate',
+ 'Accept-Encoding' => $this->checkEncoding()
],
];
diff --git a/lib/Fetcher/FeedFetcher.php b/lib/Fetcher/FeedFetcher.php
index 9fdee1d97..33fb2a508 100755
--- a/lib/Fetcher/FeedFetcher.php
+++ b/lib/Fetcher/FeedFetcher.php
@@ -73,6 +73,11 @@ class FeedFetcher implements IFeedFetcher
*/
private $logger;
+ /**
+ * @var FetcherConfig
+ */
+ private $fetcherConfig;
+
public function __construct(
FeedIo $fetcher,
Favicon $favicon,
@@ -80,7 +85,8 @@ class FeedFetcher implements IFeedFetcher
IL10N $l10n,
ITempManager $ITempManager,
Time $time,
- LoggerInterface $logger
+ LoggerInterface $logger,
+ FetcherConfig $fetcherConfig
) {
$this->reader = $fetcher;
$this->faviconFactory = $favicon;
@@ -89,6 +95,7 @@ class FeedFetcher implements IFeedFetcher
$this->ITempManager = $ITempManager;
$this->time = $time;
$this->logger = $logger;
+ $this->fetcherConfig = $fetcherConfig;
}
@@ -409,7 +416,8 @@ class FeedFetcher implements IFeedFetcher
'headers' => [
'User-Agent' => FetcherConfig::DEFAULT_USER_AGENT,
'Accept' => 'image/*',
- 'If-Modified-Since' => date(DateTime::RFC7231, $last_modified)
+ 'If-Modified-Since' => date(DateTime::RFC7231, $last_modified),
+ 'Accept-Encoding' => $this->fetcherConfig->checkEncoding()
]
]
);
diff --git a/tests/Unit/Fetcher/FeedFetcherTest.php b/tests/Unit/Fetcher/FeedFetcherTest.php
index 1814a8271..c46a9df7a 100644
--- a/tests/Unit/Fetcher/FeedFetcherTest.php
+++ b/tests/Unit/Fetcher/FeedFetcherTest.php
@@ -28,11 +28,12 @@ use \OCA\News\Db\Feed;
use \OCA\News\Db\Item;
use OCA\News\Scraper\Scraper;
use OCA\News\Fetcher\FeedFetcher;
-use GuzzleHttp\Client;
+use OCA\News\Config\FetcherConfig;
use OCA\News\Utility\Time;
use OCP\IL10N;
use OCP\ITempManager;
+
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
@@ -108,9 +109,9 @@ class FeedFetcherTest extends TestCase
private $scraper;
/**
- * @var MockObject|Client
+ * @var MockObject|FetcherConfig
*/
- private $client;
+ private $fetcherConfig;
//metadata
/**
@@ -194,7 +195,7 @@ class FeedFetcherTest extends TestCase
$this->scraper = $this->getMockBuilder(Scraper::class)
->disableOriginalConstructor()
->getMock();
- $this->client = $this->getMockBuilder(Client::class)
+ $this->fetcherConfig = $this->getMockBuilder(FetcherConfig::class)
->disableOriginalConstructor()
->getMock();
$this->fetcher = new FeedFetcher(
@@ -205,7 +206,7 @@ class FeedFetcherTest extends TestCase
$this->ITempManager,
$timeFactory,
$this->logger,
- $this->client
+ $this->fetcherConfig
);
$this->url = 'http://tests/';