Merge pull request #29 from brycekahle/fix-token-refresh

Fix access token refresh
This commit is contained in:
Alex Pliutau 2017-07-09 21:18:39 +07:00 committed by GitHub
commit 24bb73cc93
2 changed files with 12 additions and 8 deletions

View File

@ -9,6 +9,7 @@ import (
"io/ioutil"
"net/http"
"net/http/httputil"
"time"
)
// NewClient returns new Client struct
@ -45,6 +46,7 @@ func (c *Client) GetAccessToken() (*TokenResponse, error) {
// Set Token fur current Client
if t.Token != "" {
c.Token = &t
c.tokenExpiresAt = time.Now().Add(time.Duration(t.ExpiresIn) * time.Second)
}
return &t, err
@ -55,6 +57,7 @@ func (c *Client) SetAccessToken(token string) error {
c.Token = &TokenResponse{
Token: token,
}
c.tokenExpiresAt = time.Unix(0, 0)
return nil
}
@ -124,7 +127,7 @@ func (c *Client) Send(req *http.Request, v interface{}) error {
// client.Token will be updated when changed
func (c *Client) SendWithAuth(req *http.Request, v interface{}) error {
if c.Token != nil {
if c.Token.ExpiresIn < RequestNewTokenBeforeExpiresIn {
if !c.tokenExpiresAt.IsZero() && c.tokenExpiresAt.Sub(time.Now()) < RequestNewTokenBeforeExpiresIn {
// c.Token will be updated in GetAccessToken call
if _, err := c.GetAccessToken(); err != nil {
return err

View File

@ -15,7 +15,7 @@ const (
APIBaseLive = "https://api.paypal.com"
// RequestNewTokenBeforeExpiresIn is used by SendWithAuth and try to get new Token when it's about to expire
RequestNewTokenBeforeExpiresIn = 60
RequestNewTokenBeforeExpiresIn = time.Duration(60) * time.Second
)
// Possible values for `no_shipping` in InputFields
@ -107,12 +107,13 @@ type (
// Client represents a Paypal REST API Client
Client struct {
client *http.Client
ClientID string
Secret string
APIBase string
Log io.Writer // If user set log file name all requests will be logged there
Token *TokenResponse
client *http.Client
ClientID string
Secret string
APIBase string
Log io.Writer // If user set log file name all requests will be logged there
Token *TokenResponse
tokenExpiresAt time.Time
}
// CreditCard struct