Easee: prevent DOS when signalr connect fails due to rejected token (#8915)
Some checks failed
Release / call-build-workflow (push) Has been cancelled
Release / Publish Docker :release (push) Has been cancelled
Release / Github & APT (push) Has been cancelled
Release / Demo (push) Has been cancelled
Release / Hassio Addon (push) Has been cancelled

This commit is contained in:
andig 2023-07-11 13:01:21 +02:00 • committed by GitHub
parent 75e98550de
commit 850c093958
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -28,6 +28,7 @@ import (
"sync"
"time"
"github.com/cenkalti/backoff/v4"
"github.com/evcc-io/evcc/api"
"github.com/evcc-io/evcc/charger/easee"
"github.com/evcc-io/evcc/core/loadpoint"
@ -202,7 +203,18 @@ func (c *Easee) chargerSite(charger string) (easee.Site, error) {
// connect creates an HTTP connection to the signalR hub
func (c *Easee) connect(ts oauth2.TokenSource) func() (signalr.Connection, error) {
return func() (signalr.Connection, error) {
bo := backoff.NewExponentialBackOff()
bo.MaxElapsedTime = time.Minute
return func() (conn signalr.Connection, err error) {
defer func() {
if err != nil {
time.Sleep(bo.NextBackOff())
} else {
bo.Reset()
}
}()
tok, err := ts.Token()
if err != nil {
return nil, err