diff --git a/lib/private/App/AppStore/Fetcher/AppFetcher.php b/lib/private/App/AppStore/Fetcher/AppFetcher.php index badc4edb444bc..84ca35439fcf0 100644 --- a/lib/private/App/AppStore/Fetcher/AppFetcher.php +++ b/lib/private/App/AppStore/Fetcher/AppFetcher.php @@ -66,7 +66,6 @@ public function __construct(Factory $appDataFactory, ); $this->fileName = 'apps.json'; - $this->setEndpoint(); $this->compareVersion = $compareVersion; $this->ignoreMaxVersion = true; } @@ -141,10 +140,6 @@ protected function fetch($ETag, $content) { return $response; } - private function setEndpoint() { - $this->endpointUrl = 'https://apps.nextcloud.com/api/v1/apps.json'; - } - /** * @param string $version * @param string $fileName diff --git a/lib/private/App/AppStore/Fetcher/CategoryFetcher.php b/lib/private/App/AppStore/Fetcher/CategoryFetcher.php index f2c523df908c4..79e350f593dd3 100644 --- a/lib/private/App/AppStore/Fetcher/CategoryFetcher.php +++ b/lib/private/App/AppStore/Fetcher/CategoryFetcher.php @@ -53,6 +53,5 @@ public function __construct(Factory $appDataFactory, $logger ); $this->fileName = 'categories.json'; - $this->endpointUrl = 'https://apps.nextcloud.com/api/v1/categories.json'; } } diff --git a/lib/private/App/AppStore/Fetcher/Fetcher.php b/lib/private/App/AppStore/Fetcher/Fetcher.php index db8c38ac68683..a9fba4382fcd8 100644 --- a/lib/private/App/AppStore/Fetcher/Fetcher.php +++ b/lib/private/App/AppStore/Fetcher/Fetcher.php @@ -54,8 +54,6 @@ abstract class Fetcher { /** @var string */ protected $fileName; /** @var string */ - protected $endpointUrl; - /** @var string */ protected $version; /** @var string */ protected $channel; @@ -105,7 +103,7 @@ protected function fetch($ETag, $content) { } $client = $this->clientService->newClient(); - $response = $client->get($this->endpointUrl, $options); + $response = $client->get($this->getEndpoint(), $options); $responseJson = []; if ($response->getStatusCode() === Http::STATUS_NOT_MODIFIED) { @@ -218,4 +216,8 @@ protected function getChannel() { public function setChannel(string $channel) { $this->channel = $channel; } + + protected function getEndpoint(): string { + return $this->config->getSystemValue('appstoreurl', 'https://apps.nextcloud.com/api/v1') . '/' . $this->fileName; + } } diff --git a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php index 214f652742b03..425ee60203210 100644 --- a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php +++ b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php @@ -92,6 +92,8 @@ public function testGetWithFilter() { return true; } else if ($key === 'version') { return '11.0.0.2'; + } else if ($key === 'appstoreurl' && $default === 'https://apps.nextcloud.com/api/v1') { + return 'https://custom.appsstore.endpoint/api/v1'; } else { return $default; } @@ -122,7 +124,7 @@ public function testGetWithFilter() { $response = $this->createMock(IResponse::class); $client ->method('get') - ->with('https://apps.nextcloud.com/api/v1/apps.json') + ->with('https://custom.appsstore.endpoint/api/v1/apps.json') ->willReturn($response); $response ->expects($this->once()) diff --git a/tests/lib/App/AppStore/Fetcher/FetcherBase.php b/tests/lib/App/AppStore/Fetcher/FetcherBase.php index 851773a65066d..06a20572c1b4b 100644 --- a/tests/lib/App/AppStore/Fetcher/FetcherBase.php +++ b/tests/lib/App/AppStore/Fetcher/FetcherBase.php @@ -137,6 +137,11 @@ public function testGetWithNotExistingFileAndUpToDateTimestampAndVersion() { $this->config ->expects($this->at(3)) ->method('getSystemValue') + ->with('appstoreurl', 'https://apps.nextcloud.com/api/v1') + ->willReturn('https://apps.nextcloud.com/api/v1'); + $this->config + ->expects($this->at(4)) + ->method('getSystemValue') ->with( $this->equalTo('version'), $this->anything() @@ -298,6 +303,11 @@ public function testGetWithAlreadyExistingFileAndNoVersion() { $this->config ->expects($this->at(3)) ->method('getSystemValue') + ->with('appstoreurl', 'https://apps.nextcloud.com/api/v1') + ->willReturn('https://apps.nextcloud.com/api/v1'); + $this->config + ->expects($this->at(4)) + ->method('getSystemValue') ->with( $this->equalTo('version'), $this->anything() @@ -382,6 +392,11 @@ public function testGetWithAlreadyExistingFileAndOutdatedVersion() { $this->config ->expects($this->at(3)) ->method('getSystemValue') + ->with('appstoreurl', 'https://apps.nextcloud.com/api/v1') + ->willReturn('https://apps.nextcloud.com/api/v1'); + $this->config + ->expects($this->at(4)) + ->method('getSystemValue') ->with( $this->equalTo('version'), $this->anything()