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},