diff --git a/vehicle/polestar/api.go b/vehicle/polestar/api.go index 29a6c9c659..0f86952603 100644 --- a/vehicle/polestar/api.go +++ b/vehicle/polestar/api.go @@ -8,8 +8,7 @@ import ( "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/request" "github.com/evcc-io/evcc/util/transport" - "github.com/samber/lo" - "github.com/shurcooL/graphql" + "github.com/hasura/go-graphql-client" "golang.org/x/oauth2" ) @@ -49,22 +48,23 @@ func NewAPI(log *util.Logger, identity oauth2.TokenSource) *API { func (v *API) Vehicles(ctx context.Context) ([]string, error) { var res struct { - MyStar struct { - // Type string `graphql:"__typename"` - GetConsumer Consumer - GetConsumerCars []ConsumerCar + GetConsumerCarsV2 struct { + Vin string + InternalVehicleIdentifier string } } var vins []string - err := v.client.Query(ctx, &res, nil) - if err == nil { - vins = lo.Map(res.MyStar.GetConsumerCars, func(v ConsumerCar, _ int) string { - return v.Vin - }) - } + err := v.client.Query(ctx, &res, nil, graphql.OperationName("getCars")) + // if err == nil { + // vins = lo.Map(res.MyStar.GetConsumerCars, func(v ConsumerCar, _ int) string { + // return v.Vin + // }) + // } + + fmt.Println(res) - v.Status(ctx, vins[0]) + // v.Status(ctx, vins[0]) return vins, err } diff --git a/vehicle/polestar/identity.go b/vehicle/polestar/identity.go index 7eebd0e976..e61e64c2a7 100644 --- a/vehicle/polestar/identity.go +++ b/vehicle/polestar/identity.go @@ -14,7 +14,6 @@ import ( "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/oauth" "github.com/evcc-io/evcc/util/request" - cv "github.com/nirasan/go-oauth-pkce-code-verifier" "golang.org/x/net/publicsuffix" "golang.org/x/oauth2" ) @@ -72,29 +71,25 @@ func (v *Identity) Login(user, password string) error { } } - cv, err := cv.CreateCodeVerifier() - if err != nil { - return err - } + cv := oauth2.GenerateVerifier() uri := v.oc.AuthCodeURL(state(), oauth2.AccessTypeOffline, - oauth2.SetAuthURLParam("code_challenge", cv.CodeChallengeS256()), - oauth2.SetAuthURLParam("code_challenge_method", "S256"), + oauth2.S256ChallengeOption(cv), oauth2.SetAuthURLParam("access_token_manager_id", "JWTpolxplore"), ) - var resume string - if err == nil { - var param request.InterceptResult - v.Client.CheckRedirect, param = request.InterceptRedirect("resumePath", false) + var param request.InterceptResult + v.Client.CheckRedirect, param = request.InterceptRedirect("resumePath", false) - if _, err = v.Get(uri); err == nil { - resume, err = param() - } + _, err := v.Get(uri) - v.Client.CheckRedirect = nil + var resume string + if err == nil { + resume, err = param() } + v.Client.CheckRedirect = nil + var code string if err == nil { params := url.Values{ @@ -118,7 +113,7 @@ func (v *Identity) Login(user, password string) error { if err == nil { params := url.Values{ "code": []string{code}, - "code_verifier": []string{cv.CodeChallengePlain()}, + "code_verifier": []string{cv}, "redirect_uri": []string{OAuth2Config.RedirectURL}, "grant_type": []string{"authorization_code"}, } diff --git a/vehicle/polestar/provider.go b/vehicle/polestar/provider.go index 1b1daf61ee..43cc0a01f9 100644 --- a/vehicle/polestar/provider.go +++ b/vehicle/polestar/provider.go @@ -34,8 +34,8 @@ func NewProvider(log *util.Logger, api *API, vin string, expiry, cache time.Dura // return res, err // } -// SoC implements the api.Vehicle interface -func (v *Provider) SoC() (float64, error) { +// Soc implements the api.Vehicle interface +func (v *Provider) Soc() (float64, error) { // res, err := v.statusG() return 0, nil }