From 2351eb782dd2f09d10a1f7887664d72cfd80216f Mon Sep 17 00:00:00 2001 From: sp-yduck Date: Sat, 11 Nov 2023 17:42:19 +0900 Subject: [PATCH] refresh session when reuse cached client --- proxmox/service.go | 13 ++++++++++++- rest/client.go | 4 ++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/proxmox/service.go b/proxmox/service.go index 12a6e59..ecd3d7b 100644 --- a/proxmox/service.go +++ b/proxmox/service.go @@ -1,6 +1,7 @@ package proxmox import ( + "context" "crypto/sha256" "crypto/tls" "errors" @@ -52,7 +53,17 @@ func GetOrCreateService(params Params) (*Service, error) { key := retrieveSessionKey(params) if cachedSession, ok := sessionCache.Load(key); ok { - return cachedSession.(*Service), nil + svc := cachedSession.(*Service) + if err := svc.restclient.MakeNewSession(context.Background()); err != nil { + // failed to refresh session. just try to create new svc + s, err := NewService(params) + if err != nil { + return nil, err + } + sessionCache.Store(key, s) + return s, nil + } + return svc, nil } s, err := NewService(params) diff --git a/rest/client.go b/rest/client.go index be7582c..770d015 100644 --- a/rest/client.go +++ b/rest/client.go @@ -64,7 +64,7 @@ func NewRESTClient(baseUrl string, opts ...ClientOption) (*RESTClient, error) { if client.token == "" && client.session == nil && client.credentials != nil { ctx, cancel := context.WithTimeout(context.TODO(), 1*time.Minute) defer cancel() - if err := client.makeNewSession(ctx); err != nil { + if err := client.MakeNewSession(ctx); err != nil { return nil, err } } @@ -209,7 +209,7 @@ func (c *RESTClient) makeAuthHeaders() http.Header { return header } -func (c *RESTClient) makeNewSession(ctx context.Context) error { +func (c *RESTClient) MakeNewSession(ctx context.Context) error { var err error c.session, err = c.PostTicket(ctx, *c.credentials) if err != nil {