1
0
Fork 0
mirror of synced 2024-06-14 16:54:52 +12:00

Fix race condition

This commit is contained in:
Matej Bačo 2023-04-28 11:07:26 +02:00
parent 8c1d89c33c
commit d022ee6622

View file

@ -89,8 +89,10 @@ $getUserGitHub = function (string $userId, Document $project, Database $dbForPro
$accessToken = $oauth2->getAccessToken('');
$refreshToken = $oauth2->getRefreshToken('');
if (empty($accessToken) || empty($refreshToken)) {
throw new \Exception("Generation race-condition occured."); // Handeled properly in catch
$verificationId = $oauth2->getUserID($accessToken);
if (empty($verificationId)) {
throw new \Exception("Locked tokens."); // Race codition, handeled in catch
}
$session
@ -104,23 +106,24 @@ $getUserGitHub = function (string $userId, Document $project, Database $dbForPro
} catch (Throwable $err) {
$index = 0;
do {
$oldAccessToken = $accessToken;
$previousAccessToken = $session->getAttribute('providerAccessToken');
$user = Authorization::skip(fn () => $dbForConsole->getDocument('users', $userId));
$sessions = $user->getAttribute('sessions', []);
$session = $sessions[0] ?? new Document();
$accessToken = $session->getAttribute('providerAccessToken');
if ($accessToken !== $oldAccessToken) {
if ($accessToken !== $previousAccessToken) {
break;
}
$index++;
sleep(0.5);
\usleep(500000);
} while ($index < 10);
}
}
$oauth2 = new $className($appId, $appSecret, '', [], []);
$githubUser = $oauth2->getUserSlug($accessToken);
$githubId = $oauth2->getUserID($accessToken);