diff --git a/src/applications/auth/adapter/PhutilJIRAAuthAdapter.php b/src/applications/auth/adapter/PhutilJIRAAuthAdapter.php --- a/src/applications/auth/adapter/PhutilJIRAAuthAdapter.php +++ b/src/applications/auth/adapter/PhutilJIRAAuthAdapter.php @@ -10,7 +10,6 @@ private $jiraBaseURI; private $adapterDomain; - private $currentSession; private $userInfo; public function setJIRABaseURI($jira_base_uri) { @@ -106,21 +105,34 @@ private function getUserInfo() { if ($this->userInfo === null) { - $this->currentSession = $this->newJIRAFuture('rest/auth/1/session', 'GET') - ->resolveJSON(); - - // The session call gives us the username, but not the user key or other - // information. Make a second call to get additional information. + $this->userInfo = $this->newUserInfo(); + } - $params = array( - 'username' => $this->currentSession['name'], - ); + return $this->userInfo; + } - $this->userInfo = $this->newJIRAFuture('rest/api/2/user', 'GET', $params) + private function newUserInfo() { + // See T13493. Try a relatively modern (circa early 2020) API call first. + try { + return $this->newJIRAFuture('rest/api/3/myself', 'GET') ->resolveJSON(); + } catch (Exception $ex) { + // If we failed the v3 call, assume the server version is too old + // to support this API and fall back to trying the older method. } - return $this->userInfo; + $session = $this->newJIRAFuture('rest/auth/1/session', 'GET') + ->resolveJSON(); + + // The session call gives us the username, but not the user key or other + // information. Make a second call to get additional information. + + $params = array( + 'username' => $session['name'], + ); + + return $this->newJIRAFuture('rest/api/2/user', 'GET', $params) + ->resolveJSON(); } public static function newJIRAKeypair() {