56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
|
package auth
|
||
|
|
||
|
type Client struct {
|
||
|
clientId string
|
||
|
clientSecret string
|
||
|
redirectUri string
|
||
|
|
||
|
stateStorage StateStorage
|
||
|
}
|
||
|
|
||
|
func NewClient(clientId string, clientSecret string, redirectUri string) *Client {
|
||
|
return &Client{
|
||
|
clientId: clientId,
|
||
|
clientSecret: clientSecret,
|
||
|
redirectUri: redirectUri,
|
||
|
|
||
|
stateStorage: NewHttpCookieStateStorage(StateStorageCookie),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// GetToken exchanges an authorization code for an access token.
|
||
|
//
|
||
|
// https://dev.twitch.tv/docs/authentication/getting-tokens-oidc/#oidc-authorization-code-grant-flow
|
||
|
func (c *Client) GetToken(code string) (*Token, error) {
|
||
|
return GetToken(&GetTokenParams{
|
||
|
ClientId: c.clientId,
|
||
|
ClientSecret: c.clientSecret,
|
||
|
Code: code,
|
||
|
GrantType: "authorization_code",
|
||
|
RedirectUri: c.redirectUri,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// RefreshToken exchanges a refresh token for an access token.
|
||
|
//
|
||
|
// https://dev.twitch.tv/docs/authentication/refresh-tokens/
|
||
|
func (c *Client) RefreshToken(token *Token) (*Token, error) {
|
||
|
return GetToken(&GetTokenParams{
|
||
|
ClientId: c.clientId,
|
||
|
ClientSecret: c.clientSecret,
|
||
|
Code: token.RefreshToken,
|
||
|
GrantType: "refresh_token",
|
||
|
RedirectUri: c.redirectUri,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// WithStateStorage sets the instance's state storage,
|
||
|
// which is used to store the state parameter between requests.
|
||
|
//
|
||
|
// By default, the http cookie state storage is used.
|
||
|
func (c *Client) WithStateStorage(storage StateStorage) *Client {
|
||
|
c.stateStorage = storage
|
||
|
|
||
|
return c
|
||
|
}
|