coder/testutil/oauth2.go

59 lines
1.3 KiB
Go

package testutil
import (
"context"
"net/http"
"net/url"
"time"
"golang.org/x/oauth2"
"github.com/coder/coder/v2/coderd/promoauth"
)
type OAuth2Config struct {
Token *oauth2.Token
TokenSourceFunc OAuth2TokenSource
}
func (*OAuth2Config) Do(_ context.Context, _ promoauth.Oauth2Source, req *http.Request) (*http.Response, error) {
return http.DefaultClient.Do(req)
}
func (*OAuth2Config) AuthCodeURL(state string, _ ...oauth2.AuthCodeOption) string {
return "/?state=" + url.QueryEscape(state)
}
func (c *OAuth2Config) Exchange(_ context.Context, _ string, _ ...oauth2.AuthCodeOption) (*oauth2.Token, error) {
if c.Token == nil {
return &oauth2.Token{
AccessToken: "access_token",
RefreshToken: "refresh_token",
Expiry: time.Now().Add(time.Hour),
}, nil
}
return c.Token, nil
}
func (c *OAuth2Config) TokenSource(_ context.Context, _ *oauth2.Token) oauth2.TokenSource {
if c.TokenSourceFunc == nil {
return OAuth2TokenSource(func() (*oauth2.Token, error) {
if c.Token == nil {
return &oauth2.Token{
AccessToken: "access_token",
RefreshToken: "refresh_token",
Expiry: time.Now().Add(time.Hour),
}, nil
}
return c.Token, nil
})
}
return c.TokenSourceFunc
}
type OAuth2TokenSource func() (*oauth2.Token, error)
func (o OAuth2TokenSource) Token() (*oauth2.Token, error) {
return o()
}