diff --git a/vehicle/seat-cupra.go b/vehicle/seat-cupra.go index a967e9fe4..d4bb10f45 100644 --- a/vehicle/seat-cupra.go +++ b/vehicle/seat-cupra.go @@ -10,7 +10,7 @@ import ( "github.com/evcc-io/evcc/util/request" "github.com/evcc-io/evcc/vehicle/seat" "github.com/evcc-io/evcc/vehicle/seat/cupra" - "github.com/evcc-io/evcc/vehicle/vag/tokenrefreshservice" + "github.com/evcc-io/evcc/vehicle/vag/service" "github.com/evcc-io/evcc/vehicle/vag/vwidentity" "golang.org/x/oauth2" ) @@ -51,20 +51,11 @@ func NewCupraFromConfig(other map[string]interface{}) (api.Vehicle, error) { log := util.NewLogger("cupra").Redact(cc.User, cc.Password, cc.VIN) - // get initial VW identity id_token - q, err := vwidentity.Login(log, seat.AuthParams, cc.User, cc.Password) + ts, err := service.TokenRefreshServiceTokenSource(log, seat.TRSParams, seat.AuthParams, cc.User, cc.Password) if err != nil { return nil, err } - trs := tokenrefreshservice.New(log, seat.TRSParams) - token, err := trs.Exchange(q) - if err != nil { - return nil, err - } - - ts := trs.TokenSource(token) - // get OIDC user information ctx := context.WithValue(context.Background(), oauth2.HTTPClient, request.NewClient(log)) ui, err := vwidentity.Config.NewProvider(ctx).UserInfo(ctx, ts) diff --git a/vehicle/seat.go b/vehicle/seat.go index a905e6995..1c6432be5 100644 --- a/vehicle/seat.go +++ b/vehicle/seat.go @@ -8,7 +8,6 @@ import ( "github.com/evcc-io/evcc/util/request" "github.com/evcc-io/evcc/vehicle/seat" "github.com/evcc-io/evcc/vehicle/vag/service" - "github.com/evcc-io/evcc/vehicle/vag/tokenrefreshservice" "github.com/evcc-io/evcc/vehicle/vw" ) @@ -51,8 +50,7 @@ func NewSeatFromConfig(other map[string]interface{}) (api.Vehicle, error) { log := util.NewLogger("seat").Redact(cc.User, cc.Password, cc.VIN) - trs := tokenrefreshservice.New(log, seat.TRSParams) - ts, err := service.MbbTokenSource(log, trs, seat.AuthClientID, seat.AuthParams, cc.User, cc.Password) + ts, err := service.MbbTokenSource(log, seat.TRSParams, seat.AuthClientID, seat.AuthParams, cc.User, cc.Password) if err != nil { return nil, err } diff --git a/vehicle/skoda.go b/vehicle/skoda.go index ee0caa7a0..bb8c62809 100644 --- a/vehicle/skoda.go +++ b/vehicle/skoda.go @@ -8,7 +8,6 @@ import ( "github.com/evcc-io/evcc/util/request" "github.com/evcc-io/evcc/vehicle/skoda" "github.com/evcc-io/evcc/vehicle/vag/service" - "github.com/evcc-io/evcc/vehicle/vag/tokenrefreshservice" "github.com/evcc-io/evcc/vehicle/vw" ) @@ -72,8 +71,7 @@ func NewSkodaFromConfig(other map[string]interface{}) (api.Vehicle, error) { } if err == nil { - trs := tokenrefreshservice.New(log, skoda.TRSParams) - ts, err := service.MbbTokenSource(log, trs, skoda.AuthClientID, skoda.AuthParams, cc.User, cc.Password) + ts, err := service.MbbTokenSource(log, skoda.TRSParams, skoda.AuthClientID, skoda.AuthParams, cc.User, cc.Password) if err != nil { return nil, err } diff --git a/vehicle/vag/service/mbb.go b/vehicle/vag/service/mbb.go index 6257bedb3..112ef06ec 100644 --- a/vehicle/vag/service/mbb.go +++ b/vehicle/vag/service/mbb.go @@ -6,28 +6,21 @@ import ( "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/vehicle/vag" "github.com/evcc-io/evcc/vehicle/vag/mbb" - "github.com/evcc-io/evcc/vehicle/vag/vwidentity" ) // MbbTokenSource creates a refreshing token source for use with the MBB api. // Once the MBB token expires, it is recreated from the token exchanger (either TokenRefreshService or IDK) -func MbbTokenSource(log *util.Logger, tox vag.TokenExchanger, clientID string, q url.Values, user, password string) (vag.TokenSource, error) { - q, err := vwidentity.Login(log, q, user, password) +func MbbTokenSource(log *util.Logger, toxValues url.Values, clientID string, q url.Values, user, password string) (vag.TokenSource, error) { + ts, err := TokenRefreshServiceTokenSource(log, toxValues, q, user, password) if err != nil { return nil, err } - token, err := tox.Exchange(q) - if err != nil { - return nil, err - } - - trs := tox.TokenSource(token) mbb := mbb.New(log, clientID) mts := vag.MetaTokenSource(func() (*vag.Token, error) { // get TRS token from refreshing TRS token source - itoken, err := trs.TokenEx() + itoken, err := ts.TokenEx() if err != nil { return nil, err } diff --git a/vehicle/vag/service/tokenrefreshservice.go b/vehicle/vag/service/tokenrefreshservice.go index 2ac196148..0fc4d3216 100644 --- a/vehicle/vag/service/tokenrefreshservice.go +++ b/vehicle/vag/service/tokenrefreshservice.go @@ -4,18 +4,18 @@ import ( "net/url" "github.com/evcc-io/evcc/util" + "github.com/evcc-io/evcc/vehicle/vag" "github.com/evcc-io/evcc/vehicle/vag/tokenrefreshservice" "github.com/evcc-io/evcc/vehicle/vag/vwidentity" - "golang.org/x/oauth2" ) -func TokenRefreshServiceTokenSource(log *util.Logger, data, q url.Values, user, password string) (oauth2.TokenSource, error) { +func TokenRefreshServiceTokenSource(log *util.Logger, toxValues, q url.Values, user, password string) (vag.TokenSource, error) { q, err := vwidentity.Login(log, q, user, password) if err != nil { return nil, err } - trs := tokenrefreshservice.New(log, data) + trs := tokenrefreshservice.New(log, toxValues) token, err := trs.Exchange(q) if err != nil { return nil, err diff --git a/vehicle/vw.go b/vehicle/vw.go index 5108ff6bf..58877a59f 100644 --- a/vehicle/vw.go +++ b/vehicle/vw.go @@ -7,7 +7,6 @@ import ( "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/request" "github.com/evcc-io/evcc/vehicle/vag/service" - "github.com/evcc-io/evcc/vehicle/vag/tokenrefreshservice" "github.com/evcc-io/evcc/vehicle/vw" ) @@ -50,8 +49,7 @@ func NewVWFromConfig(other map[string]interface{}) (api.Vehicle, error) { log := util.NewLogger("vw").Redact(cc.User, cc.Password, cc.VIN) - trs := tokenrefreshservice.New(log, vw.TRSParams) - ts, err := service.MbbTokenSource(log, trs, vw.AuthClientID, vw.AuthParams, cc.User, cc.Password) + ts, err := service.MbbTokenSource(log, vw.TRSParams, vw.AuthClientID, vw.AuthParams, cc.User, cc.Password) if err != nil { return nil, err }