Skip to content

Commit 6b5300f

Browse files
committed
brige: fix refreshing cloud access token
1 parent 0563a7a commit 6b5300f

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

bridge/device/cloud/manager.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ import (
4949
"github.com/plgd-dev/go-coap/v3/tcp/client"
5050
)
5151

52+
const tickInterval = time.Second * 10
53+
5254
type (
5355
GetLinksFilteredBy func(endpoints schema.Endpoints, deviceIDfilter uuid.UUID, resourceTypesFitler []string, policyBitMaskFitler schema.BitMask) (links schema.ResourceLinks)
5456
GetCertificates func(deviceID string) []tls.Certificate
@@ -216,7 +218,7 @@ func (c *Manager) Init() {
216218
if c.private.cfg.URL != "" {
217219
c.triggerRunner(false)
218220
}
219-
t := time.NewTicker(time.Second * 10)
221+
t := time.NewTicker(tickInterval)
220222
handlers := []eventloop.Handler{
221223
eventloop.NewReadHandler(reflect.ValueOf(c.trigger), c.handleTrigger),
222224
eventloop.NewReadHandler(reflect.ValueOf(t.C), c.handleTimer),
@@ -352,10 +354,16 @@ func (c *Manager) getCreds() ocfCloud.CoapSignUpResponse {
352354
}
353355

354356
func (c *Manager) isCredsExpiring() bool {
355-
if !c.signedIn || c.creds.ValidUntil.IsZero() {
357+
if c.creds.ValidUntil.IsZero() {
356358
return false
357359
}
358-
return !time.Now().Before(c.creds.ValidUntil.Add(-time.Second * 10))
360+
diff := time.Until(c.creds.ValidUntil)
361+
if diff < tickInterval*2 {
362+
// refresh token before it expires
363+
return true
364+
}
365+
// refresh token when it is 1/3 before it expires
366+
return time.Now().After(c.creds.ValidUntil.Add(-diff / 3))
359367
}
360368

361369
func getResourceTypesFilter(request *mux.Message) []string {

bridge/device/cloud/signIn.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func (c *Manager) signIn(ctx context.Context) error {
7171
return err
7272
}
7373
if resp.Code() != codes.Changed {
74-
if resp.Code() == codes.Unauthorized {
74+
if resp.Code() == codes.Unauthorized && creds.RefreshToken == "" {
7575
c.cleanup()
7676
}
7777
return errCannotSignIn(fmt.Errorf("unexpected status code %v", resp.Code()))

0 commit comments

Comments
 (0)