From 36d7c583fa340c603c8da46ba1810e8f58d8282f Mon Sep 17 00:00:00 2001 From: Gilbert Chen Date: Fri, 15 Dec 2017 08:06:23 -0500 Subject: [PATCH] Refresh token unconditionally on authorization errors --- src/duplicacy_hubicclient.go | 8 ++++---- src/duplicacy_oneclient.go | 8 +++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/duplicacy_hubicclient.go b/src/duplicacy_hubicclient.go index 73f2596..60b5afe 100644 --- a/src/duplicacy_hubicclient.go +++ b/src/duplicacy_hubicclient.go @@ -82,7 +82,7 @@ func NewHubicClient(tokenFile string) (*HubicClient, error) { CredentialLock: &sync.Mutex{}, } - err = client.RefreshToken() + err = client.RefreshToken(false) if err != nil { return nil, err } @@ -186,7 +186,7 @@ func (client *HubicClient) call(url string, method string, input interface{}, ex return nil, 0, "", HubicError{Status: response.StatusCode, Message: "Authorization error when retrieving credentials"} } - err = client.RefreshToken() + err = client.RefreshToken(true) if err != nil { return nil, 0, "", err } @@ -210,11 +210,11 @@ func (client *HubicClient) call(url string, method string, input interface{}, ex return nil, 0, "", fmt.Errorf("Maximum number of retries reached") } -func (client *HubicClient) RefreshToken() (err error) { +func (client *HubicClient) RefreshToken(force bool) (err error) { client.TokenLock.Lock() defer client.TokenLock.Unlock() - if client.Token.Valid() { + if !force && client.Token.Valid() { return nil } diff --git a/src/duplicacy_oneclient.go b/src/duplicacy_oneclient.go index 446e917..91e87c2 100644 --- a/src/duplicacy_oneclient.go +++ b/src/duplicacy_oneclient.go @@ -65,6 +65,8 @@ func NewOneDriveClient(tokenFile string) (*OneDriveClient, error) { TokenLock: &sync.Mutex{}, } + client.RefreshToken(false) + return client, nil } @@ -154,7 +156,7 @@ func (client *OneDriveClient) call(url string, method string, input interface{}, return nil, 0, OneDriveError{Status: response.StatusCode, Message: "Authorization error when refreshing token"} } - err = client.RefreshToken() + err = client.RefreshToken(true) if err != nil { return nil, 0, err } @@ -178,11 +180,11 @@ func (client *OneDriveClient) call(url string, method string, input interface{}, return nil, 0, fmt.Errorf("Maximum number of retries reached") } -func (client *OneDriveClient) RefreshToken() (err error) { +func (client *OneDriveClient) RefreshToken(force bool) (err error) { client.TokenLock.Lock() defer client.TokenLock.Unlock() - if client.Token.Valid() { + if !force && client.Token.Valid() { return nil }