diff --git a/binding/richclient.go b/binding/richclient.go index 758c34c5c..53fa89211 100644 --- a/binding/richclient.go +++ b/binding/richclient.go @@ -1,6 +1,8 @@ package binding import ( + "time" + "github.com/jortel/go-utils/logr" "github.com/konveyor/tackle2-hub/api" "github.com/konveyor/tackle2-hub/settings" @@ -149,12 +151,21 @@ func (r *RichClient) Login(user, password string) (err error) { // // Refresh client token. -func (r *RichClient) RefreshToken() (err error) { - login := api.Login{Refresh: r.Client.token.Refresh} - err = r.Client.Post(api.AuthRefreshRoot, &login) - if err != nil { - return +func (r *RichClient) KeepFreshToken() (err error) { + if r.Client.token.Refresh != "" && r.Client.token.Expiry > 1 { + go func() { + for { + refreshIn := time.Duration(float64(r.Client.token.Expiry) * 0.9) + time.Sleep(refreshIn * time.Second) + + login := api.Login{Refresh: r.Client.token.Refresh} + err = r.Client.Post(api.AuthRefreshRoot, &login) + if err != nil { + return + } + r.Client.SetToken(login) + } + }() } - r.Client.SetToken(login) return } diff --git a/test/api/client/client.go b/test/api/client/client.go index 986db0b4c..03ea47622 100644 --- a/test/api/client/client.go +++ b/test/api/client/client.go @@ -3,7 +3,6 @@ package client import ( "fmt" "os" - "time" "github.com/konveyor/tackle2-hub/binding" "github.com/konveyor/tackle2-hub/settings" @@ -23,16 +22,13 @@ func PrepareRichClient() (richClient *binding.RichClient) { // Prepare RichClient and login to Hub API richClient = binding.New(settings.Settings.Addon.Hub.URL) err := richClient.Login(os.Getenv(Username), os.Getenv(Password)) - - // Start goroutine with token refresh. - go func () { - time.Sleep(1 * time.Minute) // TODO: base sleep time on token expiration - richClient.RefreshToken() - }() if err != nil { panic(fmt.Sprintf("Cannot login to API: %v.", err.Error())) } + + // Start goroutine with token refresh. + richClient.KeepFreshToken() // Disable HTTP requests retry for network-related errors to fail quickly. richClient.Client.Retry = 0