@@ -45,6 +45,11 @@ class Iam implements IamTokenContract
4545 */
4646 protected $ logger ;
4747
48+ /**
49+ * @var int
50+ */
51+ protected $ refresh_at ;
52+
4853 /**
4954 * @param array $config
5055 * @param LoggerInterface|null $logger
@@ -96,9 +101,11 @@ public function newToken()
96101 $ tokenInfo = $ this ->config ('credentials ' )->getTokenInfo ();
97102 $ this ->iam_token = $ tokenInfo ->getToken ();
98103 $ this ->expires_at = $ tokenInfo ->getExpiresAt ();
104+ $ this ->refresh_at = $ tokenInfo ->getRefreshAt ();
99105 $ this ->saveToken ((object )[
100106 "iamToken " => $ tokenInfo ->getToken (),
101107 "expiresAt " => $ tokenInfo ->getExpiresAt (),
108+ "refreshAt " => $ tokenInfo ->getRefreshAt ()
102109 ]);
103110 return $ tokenInfo ->getToken ();
104111 }
@@ -347,11 +354,14 @@ protected function loadToken()
347354 {
348355 if ($ this ->iam_token )
349356 {
350- if ($ this ->expires_at > time ())
351- {
352- return $ this ->iam_token ;
357+ if ($ this ->refresh_at <= time ()){
358+ try {
359+ return $ this ->newToken ();
360+ } catch (\Exception $ e ){
361+ return $ this ->iam_token ;
362+ }
353363 }
354- return $ this ->newToken () ;
364+ return $ this ->iam_token ;
355365 }
356366
357367 return $ this ->loadTokenFromFile ();
@@ -372,6 +382,7 @@ protected function loadTokenFromFile()
372382 {
373383 $ this ->iam_token = $ token ->iamToken ;
374384 $ this ->expires_at = $ token ->expiresAt ;
385+ $ this ->refresh_at = $ token ->refreshAt ?? time ();
375386 $ this ->logger ()->info ('YDB: Reused IAM token [... ' . substr ($ this ->iam_token , -6 ) . ']. ' );
376387 return $ token ->iamToken ;
377388 }
@@ -390,10 +401,12 @@ protected function saveToken($token)
390401
391402 $ this ->iam_token = $ token ->iamToken ;
392403 $ this ->expires_at = $ this ->convertExpiresAt ($ token ->expiresAt ?? '' );
404+ $ this ->refresh_at = $ token ->refreshAt ;
393405
394406 file_put_contents ($ tokenFile , json_encode ([
395407 'iamToken ' => $ this ->iam_token ,
396408 'expiresAt ' => $ this ->expires_at ,
409+ 'refreshAt ' => $ this ->refresh_at
397410 ]));
398411 }
399412
0 commit comments