aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2025-01-09 15:03:07 -0100
committerMaxence Lange <maxence@artificial-owl.com>2025-01-09 15:03:07 -0100
commitb03a4788d5428b6a69ba2fd459ddc913f5188447 (patch)
treeab05a8decdefe6bd4b4729c5666b6c17bb269a24
parente346cf63eb229f88fcbbebffb84c2ec48cdbdf27 (diff)
downloadnextcloud-server-fix/noid/discover-unique-ocmprovider.tar.gz
nextcloud-server-fix/noid/discover-unique-ocmprovider.zip
fix(ocm-discovery): do not use a global model on remote discoveryfix/noid/discover-unique-ocmprovider
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
-rw-r--r--lib/private/OCM/Model/OCMProvider.php4
-rw-r--r--lib/private/OCM/OCMDiscoveryService.php11
2 files changed, 8 insertions, 7 deletions
diff --git a/lib/private/OCM/Model/OCMProvider.php b/lib/private/OCM/Model/OCMProvider.php
index 99a3770faef..3b34e635c05 100644
--- a/lib/private/OCM/Model/OCMProvider.php
+++ b/lib/private/OCM/Model/OCMProvider.php
@@ -30,7 +30,7 @@ class OCMProvider implements IOCMProvider {
private bool $emittedEvent = false;
public function __construct(
- protected IEventDispatcher $dispatcher,
+ protected ?IEventDispatcher $dispatcher,
) {
}
@@ -125,7 +125,7 @@ class OCMProvider implements IOCMProvider {
if (!$this->emittedEvent) {
$this->emittedEvent = true;
$event = new ResourceTypeRegisterEvent($this);
- $this->dispatcher->dispatchTyped($event);
+ $this->dispatcher?->dispatchTyped($event);
}
return $this->resourceTypes;
diff --git a/lib/private/OCM/OCMDiscoveryService.php b/lib/private/OCM/OCMDiscoveryService.php
index af612416372..6847512f98e 100644
--- a/lib/private/OCM/OCMDiscoveryService.php
+++ b/lib/private/OCM/OCMDiscoveryService.php
@@ -11,6 +11,7 @@ namespace OC\OCM;
use GuzzleHttp\Exception\ConnectException;
use JsonException;
+use OC\OCM\Model\OCMProvider;
use OCP\AppFramework\Http;
use OCP\Http\Client\IClientService;
use OCP\ICache;
@@ -31,7 +32,6 @@ class OCMDiscoveryService implements IOCMDiscoveryService {
ICacheFactory $cacheFactory,
private IClientService $clientService,
private IConfig $config,
- private IOCMProvider $provider,
private LoggerInterface $logger,
) {
$this->cache = $cacheFactory->createDistributed('ocm-discovery');
@@ -56,6 +56,7 @@ class OCMDiscoveryService implements IOCMDiscoveryService {
}
}
+ $provider = new OCMProvider(null);
if (!$skipCache) {
try {
$cached = $this->cache->get($remote);
@@ -63,8 +64,8 @@ class OCMDiscoveryService implements IOCMDiscoveryService {
throw new OCMProviderException('Previous discovery failed.');
}
- $this->provider->import(json_decode($cached ?? '', true, 8, JSON_THROW_ON_ERROR) ?? []);
- return $this->provider;
+ $provider->import(json_decode($cached ?? '', true, 8, JSON_THROW_ON_ERROR) ?? []);
+ return $provider;
} catch (JsonException|OCMProviderException $e) {
// we ignore cache on issues
}
@@ -84,7 +85,7 @@ class OCMDiscoveryService implements IOCMDiscoveryService {
if ($response->getStatusCode() === Http::STATUS_OK) {
$body = $response->getBody();
// update provider with data returned by the request
- $this->provider->import(json_decode($body, true, 8, JSON_THROW_ON_ERROR) ?? []);
+ $provider->import(json_decode($body, true, 8, JSON_THROW_ON_ERROR) ?? []);
$this->cache->set($remote, $body, 60 * 60 * 24);
}
} catch (JsonException|OCMProviderException $e) {
@@ -99,6 +100,6 @@ class OCMDiscoveryService implements IOCMDiscoveryService {
throw new OCMProviderException('error while requesting remote ocm provider');
}
- return $this->provider;
+ return $provider;
}
}