diff options
author | Maxence Lange <maxence@artificial-owl.com> | 2025-01-09 15:03:07 -0100 |
---|---|---|
committer | Maxence Lange <maxence@artificial-owl.com> | 2025-01-09 15:03:07 -0100 |
commit | b03a4788d5428b6a69ba2fd459ddc913f5188447 (patch) | |
tree | ab05a8decdefe6bd4b4729c5666b6c17bb269a24 | |
parent | e346cf63eb229f88fcbbebffb84c2ec48cdbdf27 (diff) | |
download | nextcloud-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.php | 4 | ||||
-rw-r--r-- | lib/private/OCM/OCMDiscoveryService.php | 11 |
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; } } |