@@ -142,7 +142,7 @@ var defaultIdentityProviderResponseParser = func(response IdentityProviderRespon
142
142
if expiresOn .Before (time .Now ()) {
143
143
return nil , fmt .Errorf ("expires on is in the past" )
144
144
}
145
- if expiresOn . Sub ( time .Now () ) < MinTokenTTL {
145
+ if time .Until ( expiresOn ) < MinTokenTTL {
146
146
return nil , fmt .Errorf ("expires on is less than minimum token TTL" )
147
147
}
148
148
// parse token as jwt token and get claims
@@ -153,7 +153,7 @@ var defaultIdentityProviderResponseParser = func(response IdentityProviderRespon
153
153
rawToken ,
154
154
expiresOn ,
155
155
time .Now ().UTC (),
156
- int64 (expiresOn . Sub ( time .Now () ).Seconds ()),
156
+ int64 (time .Until ( expiresOn ).Seconds ()),
157
157
), nil
158
158
}
159
159
@@ -309,6 +309,7 @@ func (e *entraidTokenManager) Start(listener TokenListener) (cancelFunc, error)
309
309
return
310
310
case <- time .After (e .durationToRenewal ()):
311
311
// Token is about to expire, refresh it
312
+ delay := time .Duration (e .retryOptions .InitialDelayMs ) * time .Millisecond
312
313
for i := 0 ; i < e .retryOptions .MaxAttempts ; i ++ {
313
314
select {
314
315
case <- e .closed :
@@ -325,30 +326,28 @@ func (e *entraidTokenManager) Start(listener TokenListener) (cancelFunc, error)
325
326
// check if err is retryable
326
327
if e .retryOptions .IsRetryable (err ) {
327
328
// retryable error, continue to next attempt
329
+ // Exponential backoff
330
+ if i == e .retryOptions .MaxAttempts - 1 {
331
+ // last attempt, call OnTokenError
332
+ listener .OnTokenError (err )
333
+ return
334
+ }
335
+
336
+ if delay < time .Duration (e .retryOptions .MaxDelayMs )* time .Millisecond {
337
+ delay = time .Duration (float64 (delay ) * e .retryOptions .BackoffMultiplier )
338
+ }
339
+
340
+ time .Sleep (delay )
341
+
342
+ if delay > time .Duration (e .retryOptions .MaxDelayMs )* time .Millisecond {
343
+ delay = time .Duration (e .retryOptions .MaxDelayMs ) * time .Millisecond
344
+ }
328
345
continue
329
346
} else {
330
347
// not retryable
331
348
listener .OnTokenError (err )
332
349
return
333
350
}
334
-
335
- // check if max attempts reached
336
- if i == e .retryOptions .MaxAttempts - 1 {
337
- listener .OnTokenError (err )
338
- return
339
- }
340
-
341
- // Exponential backoff
342
- delay := time .Duration (e .retryOptions .InitialDelayMs ) * time .Millisecond
343
- if delay < time .Duration (e .retryOptions .MaxDelayMs )* time .Millisecond {
344
- delay = time .Duration (float64 (delay ) * e .retryOptions .BackoffMultiplier )
345
- }
346
-
347
- time .Sleep (delay )
348
-
349
- if delay > time .Duration (e .retryOptions .MaxDelayMs )* time .Millisecond {
350
- delay = time .Duration (e .retryOptions .MaxDelayMs ) * time .Millisecond
351
- }
352
351
}
353
352
}
354
353
}
0 commit comments