From eaa83bff7a447686b468f39b40035ef211ff317a Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 3 Jul 2023 17:40:22 +0200 Subject: [PATCH] Easee: use ReuseTokenSourceWithExpiry for token refresher --- charger/easee.go | 10 +++++----- charger/easee/identity.go | 4 +++- util/oauth/tokensource.go | 18 ++---------------- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/charger/easee.go b/charger/easee.go index 23e9dc3cb..14a36ca33 100644 --- a/charger/easee.go +++ b/charger/easee.go @@ -178,17 +178,17 @@ func NewEasee(user, password, charger string, timeout time.Duration) (*Easee, er } if err == nil { - go c.keepalive() + go c.refresh() } return c, err } -// keepalive ensures tokens are refreshed even when not charging for longer time -func (c *Easee) keepalive() { +// refresh ensures tokens are refreshed even when not charging for longer time +func (c *Easee) refresh() { for range time.Tick(time.Hour) { - if _, err := c.chargerSite(c.charger); err != nil { - c.log.ERROR.Println("keep alive:", err) + if _, err := c.Client.Transport.(*oauth2.Transport).Source.Token(); err != nil { + c.log.ERROR.Println("token refresh:", err) } } } diff --git a/charger/easee/identity.go b/charger/easee/identity.go index e0860daa7..d981800ac 100644 --- a/charger/easee/identity.go +++ b/charger/easee/identity.go @@ -58,7 +58,9 @@ func TokenSource(log *util.Logger, user, password string) (oauth2.TokenSource, e if err == nil { var token Token if err = c.DoJSON(req, &token); err == nil { - c.TokenSource = oauth.RefreshTokenSource(token.AsOAuth2Token(), c, oauth.WithExpiryMargin(6*time.Hour)) + token := token.AsOAuth2Token() + ts := oauth.RefreshTokenSource(token, c) + c.TokenSource = oauth2.ReuseTokenSourceWithExpiry(token, ts, 6*time.Hour) } } diff --git a/util/oauth/tokensource.go b/util/oauth/tokensource.go index 664e84c33..66dbf0af5 100644 --- a/util/oauth/tokensource.go +++ b/util/oauth/tokensource.go @@ -17,26 +17,12 @@ type TokenSource struct { mu sync.Mutex token *oauth2.Token refresher TokenRefresher - margin time.Duration } -type TokenSourceOption func(*TokenSource) - -func WithExpiryMargin(margin time.Duration) TokenSourceOption { - return func(ts *TokenSource) { - ts.margin = margin - } -} - -func RefreshTokenSource(token *oauth2.Token, refresher TokenRefresher, opt ...TokenSourceOption) oauth2.TokenSource { +func RefreshTokenSource(token *oauth2.Token, refresher TokenRefresher) oauth2.TokenSource { ts := &TokenSource{ token: token, refresher: refresher, - margin: time.Minute, - } - - for _, o := range opt { - o(ts) } return ts @@ -46,7 +32,7 @@ func (ts *TokenSource) Token() (*oauth2.Token, error) { ts.mu.Lock() defer ts.mu.Unlock() var err error - if ts.token == nil || time.Until(ts.token.Expiry) < ts.margin { + if ts.token == nil || time.Until(ts.token.Expiry) < time.Minute { var token *oauth2.Token if token, err = ts.refresher.RefreshToken(ts.token); err == nil { if token.AccessToken == "" {