@@ -49,6 +49,8 @@ import (
4949 "github.com/plgd-dev/go-coap/v3/tcp/client"
5050)
5151
52+ const tickInterval = time .Second * 10
53+
5254type (
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
354356func (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
361369func getResourceTypesFilter (request * mux.Message ) []string {
0 commit comments