oauth2: fixing abstractions to be able to provide external token fetchers

This commit is contained in:
Burcu Dogan
2014-05-10 09:41:39 +02:00
parent c32debaa6f
commit 2af52e700e
4 changed files with 43 additions and 28 deletions

View File

@@ -72,13 +72,20 @@ type Transport interface {
}
type authorizedTransport struct {
fetcher tokenFetcher
fetcher TokenFetcher
token *Token
// Mutex to protect token during auto refreshments.
mu sync.RWMutex
}
// NewAuthorizedTransport creates a tranport that uses the provided
// token fetcher to retrieve new tokens if there is no access token
// provided or it is expired.
func NewAuthorizedTransport(fetcher TokenFetcher, token *Token) Transport {
return &authorizedTransport{fetcher: fetcher, token: token}
}
// RoundTrip authorizes the request with the existing token.
// If token is expired, tries to refresh/fetch a new token.
func (t *authorizedTransport) RoundTrip(req *http.Request) (resp *http.Response, err error) {
@@ -142,7 +149,7 @@ func (t *authorizedTransport) RefreshToken() error {
t.mu.Lock()
defer t.mu.Unlock()
token, err := t.fetcher.fetchToken(t.token)
token, err := t.fetcher.FetchToken(t.token)
if err != nil {
return err
}