Mercedes: refactor token refresh (#18412)

This commit is contained in:
andig 2025-01-26 12:13:24 +01:00 • committed by GitHub
parent 3936c13540
commit 7c5bd4b4b5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

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