mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: add support for custom auth header with client secret (#10513)
This fixes OAuth2 with JFrog Artifactory.
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -298,6 +299,40 @@ func TestRefreshToken(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestExchangeWithClientSecret(t *testing.T) {
|
||||
t.Parallel()
|
||||
// This ensures a provider that requires the custom
|
||||
// client secret exchange works.
|
||||
configs, err := externalauth.ConvertConfig([]codersdk.ExternalAuthConfig{{
|
||||
// JFrog just happens to require this custom type.
|
||||
|
||||
Type: codersdk.EnhancedExternalAuthProviderJFrog.String(),
|
||||
ClientID: "id",
|
||||
ClientSecret: "secret",
|
||||
}}, &url.URL{})
|
||||
require.NoError(t, err)
|
||||
config := configs[0]
|
||||
|
||||
client := &http.Client{
|
||||
Transport: roundTripper(func(req *http.Request) (*http.Response, error) {
|
||||
require.Equal(t, "Bearer secret", req.Header.Get("Authorization"))
|
||||
rec := httptest.NewRecorder()
|
||||
rec.WriteHeader(http.StatusOK)
|
||||
body, err := json.Marshal(&oauth2.Token{
|
||||
AccessToken: "bananas",
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
_, err = rec.Write(body)
|
||||
return rec.Result(), err
|
||||
}),
|
||||
}
|
||||
|
||||
_, err = config.Exchange(context.WithValue(context.Background(), oauth2.HTTPClient, client), "code")
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestConvertYAML(t *testing.T) {
|
||||
t.Parallel()
|
||||
for _, tc := range []struct {
|
||||
@@ -438,3 +473,9 @@ func setupOauth2Test(t *testing.T, settings testConfig) (*oidctest.FakeIDP, *ext
|
||||
|
||||
return fake, config, link
|
||||
}
|
||||
|
||||
type roundTripper func(req *http.Request) (*http.Response, error)
|
||||
|
||||
func (r roundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||
return r(req)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user