diff --git a/vehicle/vag/cariad/const.go b/vehicle/vag/cariad/const.go index d735cb08a..13cfa9a1e 100644 --- a/vehicle/vag/cariad/const.go +++ b/vehicle/vag/cariad/const.go @@ -4,4 +4,5 @@ const ( BaseURL = "https://emea.bff.cariad.digital" AndroidPackageName = "com.volkswagen.weconnect" UserAgent = "Volkswagen/3.51.1-android/14" + ClientID = "a24fba63-34b3-4d43-b181-942111e6bda8@apps_vw-dilab_com" ) diff --git a/vehicle/vag/loginapps/endpoint.go b/vehicle/vag/loginapps/endpoint.go index 8cd1de031..d99cb855f 100644 --- a/vehicle/vag/loginapps/endpoint.go +++ b/vehicle/vag/loginapps/endpoint.go @@ -3,6 +3,7 @@ package loginapps import ( "net/http" "net/url" + "strings" "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/oauth" @@ -52,17 +53,32 @@ func (v *Service) Exchange(q url.Values) (*Token, error) { } func (v *Service) Refresh(token *Token) (*Token, error) { - req, err := request.New(http.MethodGet, Endpoint.TokenURL, nil, map[string]string{ - "Accept": "application/json", - "Authorization": "Bearer " + token.RefreshToken, - }) + body := url.Values{ + "grant_type": []string{"refresh_token"}, + "refresh_token": []string{token.RefreshToken}, + "client_id": []string{cariad.ClientID}, + } - var res Token + req, err := request.New( + http.MethodPost, + cariad.BaseURL+"/login/v1/idk/token", + strings.NewReader(body.Encode()), + request.URLEncoding, + map[string]string{ + "Connection": "keep-alive", + "User-Agent": cariad.UserAgent, + "Accept": "application/json", + "x-android-package-name": cariad.AndroidPackageName, + }, + ) + + var res oauth2.Token if err == nil { err = v.DoJSON(req, &res) } - return &res, err + t := Token(res) + return &t, err } // RefreshToken implements oauth.TokenRefresher