diff --git a/lib/private/App/AppStore/Fetcher/AppFetcher.php b/lib/private/App/AppStore/Fetcher/AppFetcher.php index 49faa64bb5..d97949421d 100644 --- a/lib/private/App/AppStore/Fetcher/AppFetcher.php +++ b/lib/private/App/AppStore/Fetcher/AppFetcher.php @@ -68,7 +68,6 @@ class AppFetcher extends Fetcher { ); $this->fileName = 'apps.json'; - $this->setEndpoint(); $this->compareVersion = $compareVersion; $this->ignoreMaxVersion = true; } @@ -143,10 +142,6 @@ class AppFetcher extends Fetcher { 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 7fa0800762..904c401c15 100644 --- a/lib/private/App/AppStore/Fetcher/CategoryFetcher.php +++ b/lib/private/App/AppStore/Fetcher/CategoryFetcher.php @@ -53,6 +53,5 @@ class CategoryFetcher extends Fetcher { $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 bcfea94959..76a37bfa7d 100644 --- a/lib/private/App/AppStore/Fetcher/Fetcher.php +++ b/lib/private/App/AppStore/Fetcher/Fetcher.php @@ -55,8 +55,6 @@ abstract class Fetcher { /** @var string */ protected $fileName; /** @var string */ - protected $endpointUrl; - /** @var string */ protected $version; /** @var string */ protected $channel; @@ -106,7 +104,7 @@ abstract class Fetcher { } $client = $this->clientService->newClient(); - $response = $client->get($this->endpointUrl, $options); + $response = $client->get($this->getEndpoint(), $options); $responseJson = []; if ($response->getStatusCode() === Http::STATUS_NOT_MODIFIED) { @@ -219,4 +217,8 @@ abstract class Fetcher { 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 9a11823404..ac9ac06d19 100644 --- a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php +++ b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php @@ -92,6 +92,8 @@ EOD; 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 @@ EOD; $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 84584e5432..9dac4dd749 100644 --- a/tests/lib/App/AppStore/Fetcher/FetcherBase.php +++ b/tests/lib/App/AppStore/Fetcher/FetcherBase.php @@ -137,6 +137,11 @@ abstract class FetcherBase extends TestCase { $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 @@ abstract class FetcherBase extends TestCase { $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 @@ abstract class FetcherBase extends TestCase { $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()