Documentation ¶
Overview ¶
Example ¶
package main import ( "context" "fmt" "time" tokencache "github.com/hungdh0x5e/token-cache" "golang.org/x/oauth2" ) // Step 1 type CustomTokenGetter struct{} // FetchToken implement TokenGetter interface func (o CustomTokenGetter) FetchToken(ctx context.Context) (*oauth2.Token, error) { return nil, nil } // Step 2 func NewClient(tokenCache *tokencache.TokenCache) Client { return Client{cacheToken: tokenCache} } type Client struct { cacheToken *tokencache.TokenCache } func (c Client) UserInfo(userID string) { token, err := c.cacheToken.GetToken(context.Background()) if err != nil { fmt.Printf("UserInfo: %v, err: %v\n", userID, err) return } fmt.Printf("UserInfo: %v, token: %v\n", userID, token.AccessToken) } func main() { tokenGetter := CustomTokenGetter{} client := NewClient(tokencache.NewTokenCache(tokenGetter)) fmt.Println("Must same access token for all go-routine") for i := 1; i < 5; i++ { go client.UserInfo(fmt.Sprintf("case_%.2d", i)) //fmt.Println("==================================") //time.Sleep(time.Duration(i) * time.Second) } time.Sleep(5 * time.Second) }
Output:
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ClientCredentialGetter ¶ added in v1.0.0
type ClientCredentialGetter struct {
// contains filtered or unexported fields
}
Example ¶
package main import ( "context" "fmt" "time" tokencache "github.com/hungdh0x5e/token-cache" "golang.org/x/oauth2/clientcredentials" ) // Step 2 func NewClient(tokenCache *tokencache.TokenCache) Client { return Client{cacheToken: tokenCache} } type Client struct { cacheToken *tokencache.TokenCache } func (c Client) UserInfo(userID string) { token, err := c.cacheToken.GetToken(context.Background()) if err != nil { fmt.Printf("UserInfo: %v, err: %v\n", userID, err) return } fmt.Printf("UserInfo: %v, token: %v\n", userID, token.AccessToken) } func main() { tokenGetter := tokencache.NewClientCredentialGetter( clientcredentials.Config{ ClientID: "REPLACE_CLIENT_ID", ClientSecret: "REPLACE_CLIENT_SECRET", Scopes: []string{""}, TokenURL: "https://domain.com/oauth/token", }, nil, ) client := NewClient(tokencache.NewTokenCache(tokenGetter)) fmt.Println("Must same access token for all go-routine") for i := 1; i < 5; i++ { go client.UserInfo(fmt.Sprintf("case_%.2d", i)) //fmt.Println("==================================") //time.Sleep(time.Duration(i) * time.Second) } time.Sleep(5 * time.Second) }
Output:
func (ClientCredentialGetter) FetchToken ¶ added in v1.0.0
FetchToken implement TokenGetter interface
type TokenCache ¶
type TokenCache struct {
// contains filtered or unexported fields
}
func NewTokenCache ¶
func NewTokenCache(getter TokenGetter) *TokenCache
type TokenGetter ¶
type TokenGetter interface { // FetchToken syncs the token from the remote FetchToken(ctx context.Context) (*oauth2.Token, error) }
TokenGetter is the interface that wraps the FetchToken function.
func NewClientCredentialGetter ¶ added in v1.0.0
func NewClientCredentialGetter(config clientcredentials.Config, httpClient *http.Client) TokenGetter
Click to show internal directories.
Click to hide internal directories.