diff --git a/api/error.go b/api/error.go index 58ba7670e..3a05b207b 100644 --- a/api/error.go +++ b/api/error.go @@ -11,6 +11,9 @@ var ErrMustRetry = errors.New("must retry") // ErrSponsorRequired indicates that a sponsor token is required var ErrSponsorRequired = errors.New("sponsorship required, see https://github.com/evcc-io/evcc#sponsorship") +// ErrMissingCredentials indicates that user/password are missing +var ErrMissingCredentials = errors.New("missing credentials") + // ErrTimeout is the error returned when a timeout happened. // Modeled after context.DeadlineError var ErrTimeout error = errTimeoutError{} diff --git a/vehicle/bmw.go b/vehicle/bmw.go index 59b9c9f91..846526948 100644 --- a/vehicle/bmw.go +++ b/vehicle/bmw.go @@ -44,6 +44,10 @@ func NewBMWMiniFromConfig(brand string, other map[string]interface{}) (api.Vehic return nil, err } + if cc.User == "" || cc.Password == "" { + return nil, api.ErrMissingCredentials + } + v := &BMW{ embed: &cc.embed, } diff --git a/vehicle/carwings.go b/vehicle/carwings.go index 375309e01..5782468cd 100644 --- a/vehicle/carwings.go +++ b/vehicle/carwings.go @@ -52,7 +52,7 @@ func NewCarWingsFromConfig(other map[string]interface{}) (api.Vehicle, error) { } if cc.User == "" || cc.Password == "" { - return nil, errors.New("missing credentials") + return nil, api.ErrMissingCredentials } log := util.NewLogger("carwings").Redact(cc.User, cc.Password, cc.VIN) diff --git a/vehicle/fiat.go b/vehicle/fiat.go index f11c0b495..971f4b494 100644 --- a/vehicle/fiat.go +++ b/vehicle/fiat.go @@ -1,7 +1,6 @@ package vehicle import ( - "errors" "fmt" "strings" "time" @@ -40,7 +39,7 @@ func NewFiatFromConfig(other map[string]interface{}) (api.Vehicle, error) { } if cc.User == "" || cc.Password == "" { - return nil, errors.New("missing credentials") + return nil, api.ErrMissingCredentials } v := &Fiat{ diff --git a/vehicle/ford.go b/vehicle/ford.go index 51f39c227..3473768b4 100644 --- a/vehicle/ford.go +++ b/vehicle/ford.go @@ -56,7 +56,7 @@ func NewFordFromConfig(other map[string]interface{}) (api.Vehicle, error) { } if cc.User == "" || cc.Password == "" { - return nil, errors.New("missing credentials") + return nil, api.ErrMissingCredentials } log := util.NewLogger("ford").Redact(cc.User, cc.Password, cc.VIN) diff --git a/vehicle/hyundai.go b/vehicle/hyundai.go index fd22dc4f3..900d97183 100644 --- a/vehicle/hyundai.go +++ b/vehicle/hyundai.go @@ -1,7 +1,6 @@ package vehicle import ( - "errors" "fmt" "strings" "time" @@ -39,7 +38,7 @@ func NewHyundaiFromConfig(other map[string]interface{}) (api.Vehicle, error) { } if cc.User == "" || cc.Password == "" { - return nil, errors.New("missing credentials") + return nil, api.ErrMissingCredentials } log := util.NewLogger("hyundai").Redact(cc.User, cc.Password, cc.VIN) diff --git a/vehicle/kia.go b/vehicle/kia.go index 2e97b4689..23554647c 100644 --- a/vehicle/kia.go +++ b/vehicle/kia.go @@ -1,7 +1,6 @@ package vehicle import ( - "errors" "fmt" "strings" "time" @@ -39,7 +38,7 @@ func NewKiaFromConfig(other map[string]interface{}) (api.Vehicle, error) { } if cc.User == "" || cc.Password == "" { - return nil, errors.New("missing credentials") + return nil, api.ErrMissingCredentials } log := util.NewLogger("kia").Redact(cc.User, cc.Password, cc.VIN) diff --git a/vehicle/nissan.go b/vehicle/nissan.go index 83e3bdd8d..24b534619 100644 --- a/vehicle/nissan.go +++ b/vehicle/nissan.go @@ -44,6 +44,10 @@ func NewNissanFromConfig(other map[string]interface{}) (api.Vehicle, error) { return nil, err } + if cc.User == "" || cc.Password == "" { + return nil, api.ErrMissingCredentials + } + v := &Nissan{ embed: &cc.embed, } diff --git a/vehicle/porsche.go b/vehicle/porsche.go index b32499954..20158c5b3 100644 --- a/vehicle/porsche.go +++ b/vehicle/porsche.go @@ -42,6 +42,10 @@ func NewPorscheFromConfig(other map[string]interface{}) (api.Vehicle, error) { return nil, err } + if cc.User == "" || cc.Password == "" { + return nil, api.ErrMissingCredentials + } + log := util.NewLogger("porsche").Redact(cc.User, cc.Password, cc.VIN) identity := porsche.NewIdentity(log, cc.User, cc.Password) diff --git a/vehicle/psa.go b/vehicle/psa.go index a52828d54..c130c92f7 100644 --- a/vehicle/psa.go +++ b/vehicle/psa.go @@ -81,6 +81,10 @@ func newPSA(log *util.Logger, brand, realm, id, secret string, other map[string] return nil, err } + if cc.User == "" || cc.Password == "" { + return nil, api.ErrMissingCredentials + } + v := &PSA{ embed: &cc.embed, } diff --git a/vehicle/vw/identity.go b/vehicle/vw/identity.go index c64191769..7d6d110ee 100644 --- a/vehicle/vw/identity.go +++ b/vehicle/vw/identity.go @@ -1,13 +1,13 @@ package vw import ( - "errors" "fmt" "net/http" "net/http/cookiejar" "net/url" "strings" + "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/request" "golang.org/x/net/publicsuffix" @@ -57,7 +57,7 @@ func NewIdentity(log *util.Logger) *Identity { // UserLogin performs the identity.vwgroup.io login func (v *Identity) UserLogin(uri, user, password string) (url.Values, error) { if user == "" || password == "" { - return nil, errors.New("missing credentials") + return nil, api.ErrMissingCredentials } // track cookies and don't follow redirects