Skip to content

Commit

Permalink
chore: upgrade oauth2 (evcc-io#15910)
Browse files Browse the repository at this point in the history
  • Loading branch information
andig authored Sep 5, 2024
1 parent 1c19de6 commit 433c709
Show file tree
Hide file tree
Showing 14 changed files with 51 additions and 103 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ require (
golang.org/x/crypto/x509roots/fallback v0.0.0-20240806160748-b2d3a6a4b4d3
golang.org/x/exp v0.0.0-20240823005443-9b4947da3948
golang.org/x/net v0.28.0
golang.org/x/oauth2 v0.22.0
golang.org/x/oauth2 v0.23.0
golang.org/x/sync v0.8.0
golang.org/x/text v0.17.0
golang.org/x/tools v0.24.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -750,8 +750,8 @@ golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
Expand Down
4 changes: 2 additions & 2 deletions tariff/edf-tempo.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,11 @@ func (t *EdfTempo) RefreshToken(_ *oauth2.Token) (*oauth2.Token, error) {
"Accept": request.JSONContent,
})

var res oauth.Token
var res oauth2.Token
client := request.NewHelper(t.log)
err := client.DoJSON(req, &res)

return (*oauth2.Token)(&res), err
return util.TokenWithExpiry(&res), err
}

func (t *EdfTempo) run(done chan error) {
Expand Down
29 changes: 0 additions & 29 deletions util/oauth/token.go

This file was deleted.

31 changes: 0 additions & 31 deletions util/oauth/token_test.go

This file was deleted.

14 changes: 14 additions & 0 deletions util/token.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package util

import (
"time"

"golang.org/x/oauth2"
)

func TokenWithExpiry(token *oauth2.Token) *oauth2.Token {
if token != nil && token.Expiry.IsZero() && token.ExpiresIn != 0 {
token.Expiry = time.Now().Add(time.Second * time.Duration(token.ExpiresIn))
}
return token
}
20 changes: 9 additions & 11 deletions vehicle/bluelink/identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ func (v *Identity) bluelinkLogin(cookieClient *request.Helper, user, password st
return accCode, err
}

func (v *Identity) exchangeCode(accCode string) (oauth.Token, error) {
func (v *Identity) exchangeCode(accCode string) (*oauth2.Token, error) {
headers := map[string]string{
"Authorization": "Basic " + v.config.BasicToken,
"Content-type": "application/x-www-form-urlencoded",
Expand All @@ -288,14 +288,12 @@ func (v *Identity) exchangeCode(accCode string) (oauth.Token, error) {
"code": {accCode},
}

var token oauth.Token
var token oauth2.Token

req, err := request.New(http.MethodPost, v.config.URI+TokenURL, strings.NewReader(data.Encode()), headers)
if err == nil {
err = v.DoJSON(req, &token)
}
req, _ := request.New(http.MethodPost, v.config.URI+TokenURL, strings.NewReader(data.Encode()), headers)
err := v.DoJSON(req, &token)

return token, err
return util.TokenWithExpiry(&token), err
}

// RefreshToken implements oauth.TokenRefresher
Expand All @@ -314,12 +312,12 @@ func (v *Identity) RefreshToken(token *oauth2.Token) (*oauth2.Token, error) {

req, err := request.New(http.MethodPost, v.config.URI+TokenURL, strings.NewReader(data.Encode()), headers)

var res oauth.Token
var res oauth2.Token
if err == nil {
err = v.DoJSON(req, &res)
}

return (*oauth2.Token)(&res), err
return util.TokenWithExpiry(&res), err
}

func (v *Identity) Login(user, password, language string) (err error) {
Expand Down Expand Up @@ -347,9 +345,9 @@ func (v *Identity) Login(user, password, language string) (err error) {
}

if err == nil {
var token oauth.Token
var token *oauth2.Token
if token, err = v.exchangeCode(code); err == nil {
v.TokenSource = oauth.RefreshTokenSource((*oauth2.Token)(&token), v)
v.TokenSource = oauth.RefreshTokenSource(token, v)
}
}

Expand Down
4 changes: 2 additions & 2 deletions vehicle/bmw/identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,12 +138,12 @@ func (v *Identity) retrieveToken(data url.Values) (*oauth2.Token, error) {
"Authorization": v.region.Token.Authorization,
})

var tok oauth.Token
var tok oauth2.Token
if err == nil {
err = v.DoJSON(req, &tok)
}

return (*oauth2.Token)(&tok), err
return util.TokenWithExpiry(&tok), err
}

func (v *Identity) RefreshToken(token *oauth2.Token) (*oauth2.Token, error) {
Expand Down
6 changes: 3 additions & 3 deletions vehicle/ford/autonomic/identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,13 @@ func (v *Identity) exchange(token *oauth2.Token) (*oauth2.Token, error) {
"subject_token_type": {"urn:ietf:params:oauth:token-type:jwt"},
}

var auto *oauth.Token
var res *oauth2.Token
req, err := request.New(http.MethodPost, OAuth2Config.Endpoint.TokenURL, strings.NewReader(data.Encode()), request.URLEncoding)
if err == nil {
err = v.DoJSON(req, &auto)
err = v.DoJSON(req, &res)
}

return (*oauth2.Token)(auto), err
return util.TokenWithExpiry(res), err
}

// RefreshToken implements oauth.TokenRefresher
Expand Down
19 changes: 8 additions & 11 deletions vehicle/ford/identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,13 @@ func NewIdentity(log *util.Logger, user, password, domain string) *Identity {
func (v *Identity) Login() error {
token, err := v.login()
if err == nil {
v.TokenSource = oauth.RefreshTokenSource((*oauth2.Token)(token), v)
v.TokenSource = oauth.RefreshTokenSource(token, v)
}
return err
}

// login authenticates with username/password to get new token
func (v *Identity) login() (*oauth.Token, error) {
func (v *Identity) login() (*oauth2.Token, error) {
oc := NewOauth2Config(v.domain)

cv := oauth2.GenerateVerifier()
Expand Down Expand Up @@ -185,7 +185,7 @@ func (v *Identity) login() (*oauth.Token, error) {
tok, err := oc.Exchange(ctx, code, oauth2.VerifierOption(cv))

// exchange code for api token
var token oauth.Token
var token oauth2.Token
if err == nil {
data := map[string]string{
"idpToken": tok.AccessToken,
Expand All @@ -204,7 +204,7 @@ func (v *Identity) login() (*oauth.Token, error) {
}
}

return &token, err
return util.TokenWithExpiry(&token), err
}

// RefreshToken implements oauth.TokenRefresher
Expand All @@ -214,19 +214,16 @@ func (v *Identity) RefreshToken(token *oauth2.Token) (*oauth2.Token, error) {
}

uri := fmt.Sprintf("%s/api/token/v2/cat-with-refresh-token", TokenURI)
req, err := request.New(http.MethodPost, uri, request.MarshalJSON(data), map[string]string{
req, _ := request.New(http.MethodPost, uri, request.MarshalJSON(data), map[string]string{
"Content-type": request.JSONContent,
"Application-Id": ApplicationID,
})

var res *oauth.Token
if err == nil {
err = v.DoJSON(req, &res)
}

var res *oauth2.Token
err := v.DoJSON(req, &res)
if err != nil {
res, err = v.login()
}

return (*oauth2.Token)(res), err
return util.TokenWithExpiry(res), err
}
4 changes: 2 additions & 2 deletions vehicle/mercedes/identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,12 @@ func (v *Identity) RefreshToken(token *oauth2.Token) (*oauth2.Token, error) {
uri := fmt.Sprintf("%s/as/token.oauth2", IdUri)
req, _ := request.New(http.MethodPost, uri, strings.NewReader(data.Encode()), mbheaders(true, v.region))

var res oauth.Token
var res oauth2.Token
if err := v.DoJSON(req, &res); err != nil {
return nil, err
}

tok := (*oauth2.Token)(&res)
tok := util.TokenWithExpiry(&res)
v.TokenSource = oauth.RefreshTokenSource(tok, v)

err := settings.SetJson(v.settingsKey(), tok)
Expand Down
5 changes: 2 additions & 3 deletions vehicle/mercedes/setupapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"strings"

"github.com/evcc-io/evcc/util"
"github.com/evcc-io/evcc/util/oauth"
"github.com/evcc-io/evcc/util/request"
"github.com/evcc-io/evcc/util/transport"
"github.com/google/uuid"
Expand Down Expand Up @@ -85,10 +84,10 @@ func (vs *SetupAPI) RequestAccessToken(nonce string, pin string) (*oauth2.Token,
uri := fmt.Sprintf("%s/as/token.oauth2", IdUri)
req, _ := request.New(http.MethodPost, uri, strings.NewReader(data.Encode()), mbheaders(true, vs.region))

var res oauth.Token
var res oauth2.Token
if err := vs.DoJSON(req, &res); err != nil {
return nil, err
}

return (*oauth2.Token)(&res), nil
return util.TokenWithExpiry(&res), nil
}
4 changes: 2 additions & 2 deletions vehicle/tronity.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,10 @@ func (v *Tronity) RefreshToken(_ *oauth2.Token) (*oauth2.Token, error) {

req, _ := request.New(http.MethodPost, v.oc.Endpoint.TokenURL, request.MarshalJSON(data), request.JSONEncoding)

var token oauth.Token
var token oauth2.Token
err := request.NewHelper(v.log).DoJSON(req, &token)

return (*oauth2.Token)(&token), err
return util.TokenWithExpiry(&token), err
}

// vehicles implements the vehicles api
Expand Down
8 changes: 4 additions & 4 deletions vehicle/volvo/connected/identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@ func (v *Identity) Login(user, password string) (oauth2.TokenSource, error) {
return nil, err
}

var tok oauth.Token
var tok oauth2.Token
if err := v.DoJSON(req, &tok); err != nil {
return nil, err
}

token := (*oauth2.Token)(&tok)
token := util.TokenWithExpiry(&tok)
ts := oauth2.ReuseTokenSourceWithExpiry(token, oauth.RefreshTokenSource(token, v), 15*time.Minute)
go oauth.Refresh(v.log, token, ts)

Expand All @@ -88,10 +88,10 @@ func (v *Identity) RefreshToken(token *oauth2.Token) (*oauth2.Token, error) {
return nil, err
}

var res oauth.Token
var res oauth2.Token
if err := v.DoJSON(req, &res); err != nil {
return nil, err
}

return (*oauth2.Token)(&res), err
return util.TokenWithExpiry(&res), err
}

0 comments on commit 433c709

Please sign in to comment.