From 7c5bd4b4b50f6c871d850c34ac57fc0079d09312 Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 26 Jan 2025 12:13:24 +0100 Subject: [PATCH] Mercedes: refactor token refresh (#18412) --- vehicle/mercedes/identity.go | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/vehicle/mercedes/identity.go b/vehicle/mercedes/identity.go index c329aa1de..d77bb712d 100644 --- a/vehicle/mercedes/identity.go +++ b/vehicle/mercedes/identity.go @@ -7,7 +7,6 @@ import ( "net/url" "strings" "sync" - "time" "github.com/evcc-io/evcc/server/db/settings" "github.com/evcc-io/evcc/util" @@ -60,27 +59,25 @@ func NewIdentity(log *util.Logger, token *oauth2.Token, account string, region s // reuse identity instance if instance := getInstance(account); instance != nil { - v.log.DEBUG.Println("identity.NewIdentity - token found in instance store") return instance, nil } + // config token if !token.Valid() { - token.Expiry = time.Now().Add(time.Duration(10) * time.Second) + token, _ = v.RefreshToken(token) } // database token if !token.Valid() { - var tok oauth2.Token - if err := settings.Json(v.settingsKey(), &tok); err == nil { - v.log.DEBUG.Println("identity.NewIdentity - database token found") - token = &tok + if err := settings.Json(v.settingsKey(), &token); err != nil { + return nil, errors.New("missing token") } - } - if !token.Valid() && token.RefreshToken != "" { - v.log.DEBUG.Println("identity.NewIdentity - refreshToken started") - if tok, err := v.RefreshToken(token); err == nil { - token = tok + if !token.Valid() { + var err error + if token, err = v.RefreshToken(token); err != nil { + return nil, err + } } } @@ -104,6 +101,10 @@ func (v *Identity) RefreshToken(token *oauth2.Token) (*oauth2.Token, error) { v.mu.Lock() defer v.mu.Unlock() + if token == nil { + return nil, errors.New("token is nil") + } + data := url.Values{ "grant_type": {"refresh_token"}, "refresh_token": {token.RefreshToken},