github.com/wanddynosios/cli/v8@v8.7.9-0.20240221182337-1a92e3a7017f/api/uaa/noaabridge/token_refresher.go (about) 1 // Package noaabridge wraps a UAA client and a tokenCache to support the 2 // TokenRefresher interface for noaa/consumer. 3 package noaabridge 4 5 import "code.cloudfoundry.org/cli/api/uaa" 6 7 //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . UAAClient 8 9 // UAAClient is the interface for getting a valid access token 10 type UAAClient interface { 11 RefreshAccessToken(refreshToken string) (uaa.RefreshedTokens, error) 12 } 13 14 //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . TokenCache 15 16 // TokenCache is where the UAA token information is stored. 17 type TokenCache interface { 18 RefreshToken() string 19 SetAccessToken(token string) 20 SetRefreshToken(token string) 21 } 22 23 // TokenRefresher implements the TokenRefresher interface. It requires a UAA 24 // client and a token cache for storing the access and refresh tokens. 25 type TokenRefresher struct { 26 uaaClient UAAClient 27 cache TokenCache 28 } 29 30 // NewTokenRefresher returns back a pointer to a TokenRefresher. 31 func NewTokenRefresher(uaaClient UAAClient, cache TokenCache) *TokenRefresher { 32 return &TokenRefresher{ 33 uaaClient: uaaClient, 34 cache: cache, 35 } 36 } 37 38 // RefreshAuthToken refreshes the current Authorization Token and stores the 39 // Access and Refresh token in it's cache. The returned Authorization Token 40 // includes the type prefixed by a space. 41 func (t *TokenRefresher) RefreshAuthToken() (string, error) { 42 tokens, err := t.uaaClient.RefreshAccessToken(t.cache.RefreshToken()) 43 if err != nil { 44 return "", err 45 } 46 47 t.cache.SetAccessToken(tokens.AuthorizationToken()) 48 t.cache.SetRefreshToken(tokens.RefreshToken) 49 return tokens.AuthorizationToken(), nil 50 }