diff options
author | Björn Schießle <bjoern@schiessle.org> | 2015-11-19 11:48:21 +0100 |
---|---|---|
committer | Björn Schießle <bjoern@schiessle.org> | 2015-11-19 18:07:33 +0100 |
commit | 6f7aa3392f4ec47d03164a9732842ec034aeae48 (patch) | |
tree | 3a277311f8eb5d00cfbea92014cb5de8e818c419 /apps/federation/backgroundjob/getsharedsecret.php | |
parent | 2754afc0747950591b3ddca37248d363c6ab64f3 (diff) | |
download | nextcloud-server-6f7aa3392f4ec47d03164a9732842ec034aeae48.tar.gz nextcloud-server-6f7aa3392f4ec47d03164a9732842ec034aeae48.zip |
make sure that both server don't try to exchange the shared secret in parallel
Diffstat (limited to 'apps/federation/backgroundjob/getsharedsecret.php')
-rw-r--r-- | apps/federation/backgroundjob/getsharedsecret.php | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/apps/federation/backgroundjob/getsharedsecret.php b/apps/federation/backgroundjob/getsharedsecret.php index 3e8597cd78b..dd095ed117a 100644 --- a/apps/federation/backgroundjob/getsharedsecret.php +++ b/apps/federation/backgroundjob/getsharedsecret.php @@ -22,6 +22,7 @@ namespace OCA\Federation\BackgroundJob; +use GuzzleHttp\Exception\ClientException; use OC\BackgroundJob\QueuedJob; use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; @@ -52,6 +53,9 @@ class GetSharedSecret extends QueuedJob{ /** @var TrustedServers */ private $trustedServers; + /** @var DbHandler */ + private $dbHandler; + /** @var ILogger */ private $logger; @@ -65,23 +69,26 @@ class GetSharedSecret extends QueuedJob{ * @param IJobList $jobList * @param TrustedServers $trustedServers * @param ILogger $logger + * @param DbHandler $dbHandler */ public function __construct( IClient $httpClient = null, IURLGenerator $urlGenerator = null, IJobList $jobList = null, TrustedServers $trustedServers = null, - ILogger $logger = null + ILogger $logger = null, + dbHandler $dbHandler = null ) { $this->logger = $logger ? $logger : \OC::$server->getLogger(); $this->httpClient = $httpClient ? $httpClient : \OC::$server->getHTTPClientService()->newClient(); $this->jobList = $jobList ? $jobList : \OC::$server->getJobList(); $this->urlGenerator = $urlGenerator ? $urlGenerator : \OC::$server->getURLGenerator(); + $this->dbHandler = $dbHandler ? $dbHandler : new DbHandler(\OC::$server->getDatabaseConnection(), \OC::$server->getL10N('federation')); if ($trustedServers) { $this->trustedServers = $trustedServers; } else { $this->trustedServers = new TrustedServers( - new DbHandler(\OC::$server->getDatabaseConnection(), \OC::$server->getL10N('federation')), + $this->dbHandler, \OC::$server->getHTTPClientService(), \OC::$server->getLogger(), $this->jobList, @@ -112,20 +119,25 @@ class GetSharedSecret extends QueuedJob{ $source = rtrim($source, '/'); $token = $argument['token']; - $result = $this->httpClient->get( - $target . $this->endPoint, - [ - 'query' => - [ - 'url' => $source, - 'token' => $token - ], - 'timeout' => 3, - 'connect_timeout' => 3, - ] - ); - - $status = $result->getStatusCode(); + try { + $result = $this->httpClient->get( + $target . $this->endPoint, + [ + 'query' => + [ + 'url' => $source, + 'token' => $token + ], + 'timeout' => 3, + 'connect_timeout' => 3, + ] + ); + + $status = $result->getStatusCode(); + + } catch (ClientException $e) { + $status = $e->getCode(); + } // if we received a unexpected response we try again later if ( @@ -133,10 +145,15 @@ class GetSharedSecret extends QueuedJob{ && $status !== Http::STATUS_FORBIDDEN ) { $this->jobList->add( - 'OCA\Federation\Backgroundjob\RequestSharedSecret', + 'OCA\Federation\Backgroundjob\GetSharedSecret', $argument ); - } elseif ($status === Http::STATUS_OK) { + } else { + // reset token if we received a valid response + $this->dbHandler->addToken($target, ''); + } + + if ($status === Http::STATUS_OK) { $body = $result->getBody(); $result = json_decode($body, true); if (isset($result['ocs']['data']['sharedSecret'])) { @@ -152,5 +169,6 @@ class GetSharedSecret extends QueuedJob{ $this->trustedServers->setServerStatus($target, TrustedServers::STATUS_FAILURE); } } + } } |