From 1ba58415e6bcc5f6b93e9a03de3db607fbedf950 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Tue, 16 Apr 2024 13:14:11 +0200 Subject: [PATCH] fix(federation): re-add RequestSharedSecret job if necessary fighting another race condition with federated server setup Signed-off-by: Arthur Schiwon --- .../lib/Controller/OCSAuthAPIController.php | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/apps/federation/lib/Controller/OCSAuthAPIController.php b/apps/federation/lib/Controller/OCSAuthAPIController.php index 8412868da42c8..0daf34d7dd5ce 100644 --- a/apps/federation/lib/Controller/OCSAuthAPIController.php +++ b/apps/federation/lib/Controller/OCSAuthAPIController.php @@ -7,6 +7,7 @@ */ namespace OCA\Federation\Controller; +use OCA\Federation\BackgroundJob\RequestSharedSecret; use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; use OCP\AppFramework\Http; @@ -126,6 +127,25 @@ public function requestSharedSecret(string $url, string $token): DataResponse { 'remote server (' . $url . ') presented lower token. We will initiate the exchange of the shared secret.', ['app' => 'federation'] ); + + $hasJob = false; + foreach ($this->jobList->getJobsIterator(RequestSharedSecret::class, null, 0) as $job) { + $arg = $job->getArgument(); + if (is_array($arg) && isset($arg['url']) && $arg['url'] === $url) { + $hasJob = true; + break; + } + } + if (!$hasJob) { + $this->jobList->add( + RequestSharedSecret::class, + [ + 'url' => $url, + 'token' => $this->dbHandler->getToken($url), + 'created' => $this->timeFactory->getTime() + ] + ); + } throw new OCSForbiddenException(); }