mirror of https://github.com/coder/coder.git
59 lines
1.3 KiB
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()
|
|
}
|