From a43bc0ce8b0f4175c2596f42193f13c8411fa581 Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 12 Nov 2021 11:31:09 +0100 Subject: [PATCH] Easee: Ensure token refresh doesn't race --- util/oauth/tokensource.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/util/oauth/tokensource.go b/util/oauth/tokensource.go index 425a3fa7f..e649a8c66 100644 --- a/util/oauth/tokensource.go +++ b/util/oauth/tokensource.go @@ -2,6 +2,7 @@ package oauth import ( "errors" + "sync" "time" "github.com/imdario/mergo" @@ -13,15 +14,18 @@ type TokenRefresher interface { } type TokenSource struct { + mu sync.Mutex token *oauth2.Token refresher TokenRefresher } func RefreshTokenSource(token *oauth2.Token, refresher TokenRefresher) oauth2.TokenSource { - return &TokenSource{token, refresher} + return &TokenSource{token: token, refresher: refresher} } func (ts *TokenSource) Token() (*oauth2.Token, error) { + ts.mu.Lock() + defer ts.mu.Unlock() var err error if time.Until(ts.token.Expiry) < time.Minute { var token *oauth2.Token