*: update all to accommodate changes to go-oidc

Update dex to comply with the changes to fieldnames and types of
the client and provider metadata structs in coreos/go-oidc.
This commit is contained in:
Eric Chiang 2016-01-12 17:16:28 -08:00
parent e80701f4b9
commit 5e44b6bc27
22 changed files with 92 additions and 80 deletions

View file

@ -172,7 +172,7 @@ func (ci *clientIdentity) UnmarshalJSON(data []byte) error {
Secret: c.Secret, Secret: c.Secret,
} }
ci.Metadata = oidc.ClientMetadata{ ci.Metadata = oidc.ClientMetadata{
RedirectURLs: make([]url.URL, len(c.RedirectURLs)), RedirectURIs: make([]url.URL, len(c.RedirectURLs)),
} }
for i, us := range c.RedirectURLs { for i, us := range c.RedirectURLs {
@ -180,7 +180,7 @@ func (ci *clientIdentity) UnmarshalJSON(data []byte) error {
if err != nil { if err != nil {
return err return err
} }
ci.Metadata.RedirectURLs[i] = *up ci.Metadata.RedirectURIs[i] = *up
} }
return nil return nil

View file

@ -18,7 +18,7 @@ func TestMemClientIdentityRepoNew(t *testing.T) {
{ {
id: "foo", id: "foo",
meta: oidc.ClientMetadata{ meta: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{ url.URL{
Scheme: "https", Scheme: "https",
Host: "example.com", Host: "example.com",
@ -29,7 +29,7 @@ func TestMemClientIdentityRepoNew(t *testing.T) {
{ {
id: "bar", id: "bar",
meta: oidc.ClientMetadata{ meta: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "https", Host: "example.com/foo"}, url.URL{Scheme: "https", Host: "example.com/foo"},
url.URL{Scheme: "https", Host: "example.com/bar"}, url.URL{Scheme: "https", Host: "example.com/bar"},
}, },
@ -60,8 +60,8 @@ func TestMemClientIdentityRepoNew(t *testing.T) {
t.Errorf("case %d: expected repo to contain newly created Client", i) t.Errorf("case %d: expected repo to contain newly created Client", i)
} }
wantURLs := tt.meta.RedirectURLs wantURLs := tt.meta.RedirectURIs
gotURLs := all[0].Metadata.RedirectURLs gotURLs := all[0].Metadata.RedirectURIs
if !reflect.DeepEqual(wantURLs, gotURLs) { if !reflect.DeepEqual(wantURLs, gotURLs) {
t.Errorf("case %d: redirect url mismatch, want=%v, got=%v", i, wantURLs, gotURLs) t.Errorf("case %d: redirect url mismatch, want=%v, got=%v", i, wantURLs, gotURLs)
} }
@ -72,7 +72,7 @@ func TestMemClientIdentityRepoNewDuplicate(t *testing.T) {
cr := NewClientIdentityRepo(nil) cr := NewClientIdentityRepo(nil)
meta1 := oidc.ClientMetadata{ meta1 := oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "https", Host: "foo.example.com"}, url.URL{Scheme: "https", Host: "foo.example.com"},
}, },
} }
@ -82,7 +82,7 @@ func TestMemClientIdentityRepoNewDuplicate(t *testing.T) {
} }
meta2 := oidc.ClientMetadata{ meta2 := oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "https", Host: "bar.example.com"}, url.URL{Scheme: "https", Host: "bar.example.com"},
}, },
} }
@ -174,7 +174,7 @@ func TestClientIdentityUnmarshalJSON(t *testing.T) {
sort.Strings(expectedURLs) sort.Strings(expectedURLs)
actualURLs := make([]string, 0) actualURLs := make([]string, 0)
for _, u := range actual.Metadata.RedirectURLs { for _, u := range actual.Metadata.RedirectURIs {
actualURLs = append(actualURLs, u.String()) actualURLs = append(actualURLs, u.String())
} }
sort.Strings(actualURLs) sort.Strings(actualURLs)

View file

@ -37,7 +37,7 @@ func runNewClient(cmd *cobra.Command, args []string) int {
redirectURLs[i] = *u redirectURLs[i] = *u
} }
cc, err := getDriver().NewClient(oidc.ClientMetadata{RedirectURLs: redirectURLs}) cc, err := getDriver().NewClient(oidc.ClientMetadata{RedirectURIs: redirectURLs})
if err != nil { if err != nil {
stderr("Failed creating new client: %v", err) stderr("Failed creating new client: %v", err)
return 1 return 1

View file

@ -21,13 +21,13 @@ func newAPIDriver(pcfg oidc.ProviderConfig, creds oidc.ClientCredentials) (drive
trans := &oidc.AuthenticatedTransport{ trans := &oidc.AuthenticatedTransport{
TokenRefresher: &oidc.ClientCredsTokenRefresher{ TokenRefresher: &oidc.ClientCredsTokenRefresher{
Issuer: pcfg.Issuer, Issuer: pcfg.Issuer.String(),
OIDCClient: oc, OIDCClient: oc,
}, },
RoundTripper: http.DefaultTransport, RoundTripper: http.DefaultTransport,
} }
hc := &http.Client{Transport: trans} hc := &http.Client{Transport: trans}
svc, err := schema.NewWithBasePath(hc, pcfg.Issuer) svc, err := schema.NewWithBasePath(hc, pcfg.Issuer.String())
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -41,10 +41,10 @@ type apiDriver struct {
func (d *apiDriver) NewClient(meta oidc.ClientMetadata) (*oidc.ClientCredentials, error) { func (d *apiDriver) NewClient(meta oidc.ClientMetadata) (*oidc.ClientCredentials, error) {
sc := &schema.Client{ sc := &schema.Client{
RedirectURIs: make([]string, len(meta.RedirectURLs)), RedirectURIs: make([]string, len(meta.RedirectURIs)),
} }
for i, u := range meta.RedirectURLs { for i, u := range meta.RedirectURIs {
sc.RedirectURIs[i] = u.String() sc.RedirectURIs[i] = u.String()
} }

View file

@ -31,7 +31,7 @@ func (d *dbDriver) NewClient(meta oidc.ClientMetadata) (*oidc.ClientCredentials,
return nil, err return nil, err
} }
clientID, err := oidc.GenClientID(meta.RedirectURLs[0].Host) clientID, err := oidc.GenClientID(meta.RedirectURIs[0].Host)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -89,8 +89,8 @@ func TestLoginURL(t *testing.T) {
Credentials: oidc.ClientCredentials{ID: tt.cid, Secret: "fake-client-secret"}, Credentials: oidc.ClientCredentials{ID: tt.cid, Secret: "fake-client-secret"},
RedirectURL: tt.redir, RedirectURL: tt.redir,
ProviderConfig: oidc.ProviderConfig{ ProviderConfig: oidc.ProviderConfig{
AuthEndpoint: "http://example.com/authorize", AuthEndpoint: &url.URL{Scheme: "http", Host: "example.com", Path: "/authorize"},
TokenEndpoint: "http://example.com/token", TokenEndpoint: &url.URL{Scheme: "http", Host: "example.com", Path: "/token"},
}, },
Scope: tt.scope, Scope: tt.scope,
} }

View file

@ -193,7 +193,7 @@ func TestDBClientIdentityRepoMetadata(t *testing.T) {
r := db.NewClientIdentityRepo(connect(t)) r := db.NewClientIdentityRepo(connect(t))
cm := oidc.ClientMetadata{ cm := oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "127.0.0.1:5556", Path: "/cb"}, url.URL{Scheme: "http", Host: "127.0.0.1:5556", Path: "/cb"},
url.URL{Scheme: "https", Host: "example.com", Path: "/callback"}, url.URL{Scheme: "https", Host: "example.com", Path: "/callback"},
}, },
@ -230,7 +230,7 @@ func TestDBClientIdentityRepoNewDuplicate(t *testing.T) {
r := db.NewClientIdentityRepo(connect(t)) r := db.NewClientIdentityRepo(connect(t))
meta1 := oidc.ClientMetadata{ meta1 := oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "foo.example.com"}, url.URL{Scheme: "http", Host: "foo.example.com"},
}, },
} }
@ -240,7 +240,7 @@ func TestDBClientIdentityRepoNewDuplicate(t *testing.T) {
} }
meta2 := oidc.ClientMetadata{ meta2 := oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "bar.example.com"}, url.URL{Scheme: "http", Host: "bar.example.com"},
}, },
} }
@ -254,7 +254,7 @@ func TestDBClientIdentityRepoAuthenticate(t *testing.T) {
r := db.NewClientIdentityRepo(connect(t)) r := db.NewClientIdentityRepo(connect(t))
cm := oidc.ClientMetadata{ cm := oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "127.0.0.1:5556", Path: "/cb"}, url.URL{Scheme: "http", Host: "127.0.0.1:5556", Path: "/cb"},
}, },
} }
@ -302,7 +302,7 @@ func TestDBClientIdentityAll(t *testing.T) {
r := db.NewClientIdentityRepo(connect(t)) r := db.NewClientIdentityRepo(connect(t))
cm := oidc.ClientMetadata{ cm := oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "127.0.0.1:5556", Path: "/cb"}, url.URL{Scheme: "http", Host: "127.0.0.1:5556", Path: "/cb"},
}, },
} }
@ -326,7 +326,7 @@ func TestDBClientIdentityAll(t *testing.T) {
} }
cm = oidc.ClientMetadata{ cm = oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "foo.com", Path: "/cb"}, url.URL{Scheme: "http", Host: "foo.com", Path: "/cb"},
}, },
} }

View file

@ -22,7 +22,7 @@ var (
Secret: "secret-1", Secret: "secret-1",
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{ url.URL{
Scheme: "https", Scheme: "https",
Host: "client1.example.com/callback", Host: "client1.example.com/callback",
@ -36,7 +36,7 @@ var (
Secret: "secret-2", Secret: "secret-2",
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{ url.URL{
Scheme: "https", Scheme: "https",
Host: "client2.example.com/callback", Host: "client2.example.com/callback",

View file

@ -72,8 +72,8 @@ func TestClientCreate(t *testing.T) {
t.Error("Expected new client to exist in repo") t.Error("Expected new client to exist in repo")
} }
gotURLs := make([]string, len(meta.RedirectURLs)) gotURLs := make([]string, len(meta.RedirectURIs))
for i, u := range meta.RedirectURLs { for i, u := range meta.RedirectURIs {
gotURLs[i] = u.String() gotURLs[i] = u.String()
} }
if !reflect.DeepEqual(newClientInput.RedirectURIs, gotURLs) { if !reflect.DeepEqual(newClientInput.RedirectURIs, gotURLs) {

View file

@ -104,7 +104,7 @@ func makeUserAPITestFixtures() *userAPITestFixtures {
Secret: testClientSecret, Secret: testClientSecret,
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
testRedirectURL, testRedirectURL,
}, },
}, },
@ -115,7 +115,7 @@ func makeUserAPITestFixtures() *userAPITestFixtures {
Secret: "secret", Secret: "secret",
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
testRedirectURL, testRedirectURL,
}, },
}, },

View file

@ -13,7 +13,7 @@ func MapSchemaClientToClientIdentity(sc Client) (oidc.ClientIdentity, error) {
ID: sc.Id, ID: sc.Id,
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: make([]url.URL, len(sc.RedirectURIs)), RedirectURIs: make([]url.URL, len(sc.RedirectURIs)),
}, },
} }
@ -27,7 +27,7 @@ func MapSchemaClientToClientIdentity(sc Client) (oidc.ClientIdentity, error) {
return oidc.ClientIdentity{}, errors.New("redirect URL invalid") return oidc.ClientIdentity{}, errors.New("redirect URL invalid")
} }
ci.Metadata.RedirectURLs[i] = *u ci.Metadata.RedirectURIs[i] = *u
} }
return ci, nil return ci, nil
@ -36,9 +36,9 @@ func MapSchemaClientToClientIdentity(sc Client) (oidc.ClientIdentity, error) {
func MapClientIdentityToSchemaClient(c oidc.ClientIdentity) Client { func MapClientIdentityToSchemaClient(c oidc.ClientIdentity) Client {
cl := Client{ cl := Client{
Id: c.Credentials.ID, Id: c.Credentials.ID,
RedirectURIs: make([]string, len(c.Metadata.RedirectURLs)), RedirectURIs: make([]string, len(c.Metadata.RedirectURIs)),
} }
for i, u := range c.Metadata.RedirectURLs { for i, u := range c.Metadata.RedirectURIs {
cl.RedirectURIs[i] = u.String() cl.RedirectURIs[i] = u.String()
} }
return cl return cl
@ -48,9 +48,9 @@ func MapClientIdentityToSchemaClientWithSecret(c oidc.ClientIdentity) ClientWith
cl := ClientWithSecret{ cl := ClientWithSecret{
Id: c.Credentials.ID, Id: c.Credentials.ID,
Secret: c.Credentials.Secret, Secret: c.Credentials.Secret,
RedirectURIs: make([]string, len(c.Metadata.RedirectURLs)), RedirectURIs: make([]string, len(c.Metadata.RedirectURIs)),
} }
for i, u := range c.Metadata.RedirectURLs { for i, u := range c.Metadata.RedirectURIs {
cl.RedirectURIs[i] = u.String() cl.RedirectURIs[i] = u.String()
} }
return cl return cl

View file

@ -89,7 +89,7 @@ func (c *clientResource) create(w http.ResponseWriter, r *http.Request) {
return return
} }
clientID, err := oidc.GenClientID(ci.Metadata.RedirectURLs[0].Host) clientID, err := oidc.GenClientID(ci.Metadata.RedirectURIs[0].Host)
if err != nil { if err != nil {
log.Errorf("Failed generating ID for new client: %v", err) log.Errorf("Failed generating ID for new client: %v", err)
writeAPIError(w, http.StatusInternalServerError, newAPIError(errorServerError, "unable to generate client ID")) writeAPIError(w, http.StatusInternalServerError, newAPIError(errorServerError, "unable to generate client ID"))

View file

@ -89,13 +89,13 @@ func TestCreateInvalidRequest(t *testing.T) {
{ {
req: &http.Request{Method: "POST", URL: u, Header: h, Body: makeBody(`{"redirectURIs":["asdf.com"]}`)}, req: &http.Request{Method: "POST", URL: u, Header: h, Body: makeBody(`{"redirectURIs":["asdf.com"]}`)},
wantCode: http.StatusBadRequest, wantCode: http.StatusBadRequest,
wantBody: `{"error":"invalid_client_metadata","error_description":"invalid redirect URL: scheme not http/https"}`, wantBody: `{"error":"invalid_client_metadata","error_description":"no host for uri field redirect_uris"}`,
}, },
// uri missing host // uri missing host
{ {
req: &http.Request{Method: "POST", URL: u, Header: h, Body: makeBody(`{"redirectURIs":["http://"]}`)}, req: &http.Request{Method: "POST", URL: u, Header: h, Body: makeBody(`{"redirectURIs":["http://"]}`)},
wantCode: http.StatusBadRequest, wantCode: http.StatusBadRequest,
wantBody: `{"error":"invalid_client_metadata","error_description":"invalid redirect URL: host empty"}`, wantBody: `{"error":"invalid_client_metadata","error_description":"no host for uri field redirect_uris"}`,
}, },
} }
@ -183,7 +183,7 @@ func TestList(t *testing.T) {
oidc.ClientIdentity{ oidc.ClientIdentity{
Credentials: oidc.ClientCredentials{ID: "foo", Secret: "bar"}, Credentials: oidc.ClientCredentials{ID: "foo", Secret: "bar"},
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "example.com"}, url.URL{Scheme: "http", Host: "example.com"},
}, },
}, },
@ -202,7 +202,7 @@ func TestList(t *testing.T) {
oidc.ClientIdentity{ oidc.ClientIdentity{
Credentials: oidc.ClientCredentials{ID: "foo", Secret: "bar"}, Credentials: oidc.ClientCredentials{ID: "foo", Secret: "bar"},
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "example.com"}, url.URL{Scheme: "http", Host: "example.com"},
}, },
}, },
@ -210,7 +210,7 @@ func TestList(t *testing.T) {
oidc.ClientIdentity{ oidc.ClientIdentity{
Credentials: oidc.ClientCredentials{ID: "biz", Secret: "bang"}, Credentials: oidc.ClientCredentials{ID: "biz", Secret: "bang"},
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "https", Host: "example.com", Path: "one/two/three"}, url.URL{Scheme: "https", Host: "example.com", Path: "one/two/three"},
}, },
}, },

View file

@ -158,7 +158,7 @@ func handleVerifyEmailResendFunc(
return return
} }
*redirectURL, err = client.ValidRedirectURL(redirectURL, cm.RedirectURLs) *redirectURL, err = client.ValidRedirectURL(redirectURL, cm.RedirectURIs)
if err != nil { if err != nil {
switch err { switch err {
case (client.ErrorInvalidRedirectURL): case (client.ErrorInvalidRedirectURL):

View file

@ -55,7 +55,7 @@ func handleDiscoveryFunc(cfg oidc.ProviderConfig) http.HandlerFunc {
return return
} }
b, err := json.Marshal(cfg) b, err := json.Marshal(&cfg)
if err != nil { if err != nil {
log.Errorf("Unable to marshal %#v to JSON: %v", cfg, err) log.Errorf("Unable to marshal %#v to JSON: %v", cfg, err)
} }
@ -309,13 +309,13 @@ func handleAuthFunc(srv OIDCServer, idpcs []connector.Connector, tpl *template.T
return return
} }
if len(cm.RedirectURLs) == 0 { if len(cm.RedirectURIs) == 0 {
log.Errorf("Client %q has no redirect URLs", acr.ClientID) log.Errorf("Client %q has no redirect URLs", acr.ClientID)
writeAuthError(w, oauth2.NewError(oauth2.ErrorServerError), acr.State) writeAuthError(w, oauth2.NewError(oauth2.ErrorServerError), acr.State)
return return
} }
redirectURL, err := client.ValidRedirectURL(acr.RedirectURL, cm.RedirectURLs) redirectURL, err := client.ValidRedirectURL(acr.RedirectURL, cm.RedirectURIs)
if err != nil { if err != nil {
switch err { switch err {
case (client.ErrorCantChooseRedirectURL): case (client.ErrorCantChooseRedirectURL):

View file

@ -83,7 +83,7 @@ func TestHandleAuthFuncResponsesSingleRedirectURL(t *testing.T) {
Secret: "secrete", Secret: "secrete",
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "client.example.com", Path: "/callback"}, url.URL{Scheme: "http", Host: "client.example.com", Path: "/callback"},
}, },
}, },
@ -206,7 +206,7 @@ func TestHandleAuthFuncResponsesMultipleRedirectURLs(t *testing.T) {
Secret: "secrete", Secret: "secrete",
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{Scheme: "http", Host: "foo.example.com", Path: "/callback"}, url.URL{Scheme: "http", Host: "foo.example.com", Path: "/callback"},
url.URL{Scheme: "http", Host: "bar.example.com", Path: "/callback"}, url.URL{Scheme: "http", Host: "bar.example.com", Path: "/callback"},
}, },
@ -363,17 +363,22 @@ func TestHandleDiscoveryFuncMethodNotAllowed(t *testing.T) {
} }
func TestHandleDiscoveryFunc(t *testing.T) { func TestHandleDiscoveryFunc(t *testing.T) {
u := "http://server.example.com" u := url.URL{Scheme: "http", Host: "server.example.com"}
pathURL := func(path string) *url.URL {
ucopy := u
ucopy.Path = path
return &ucopy
}
cfg := oidc.ProviderConfig{ cfg := oidc.ProviderConfig{
Issuer: u, Issuer: &u,
AuthEndpoint: u + httpPathAuth, AuthEndpoint: pathURL(httpPathAuth),
TokenEndpoint: u + httpPathToken, TokenEndpoint: pathURL(httpPathToken),
KeysEndpoint: u + httpPathKeys, KeysEndpoint: pathURL(httpPathKeys),
GrantTypesSupported: []string{oauth2.GrantTypeAuthCode}, GrantTypesSupported: []string{oauth2.GrantTypeAuthCode},
ResponseTypesSupported: []string{"code"}, ResponseTypesSupported: []string{"code"},
SubjectTypesSupported: []string{"public"}, SubjectTypesSupported: []string{"public"},
IDTokenAlgValuesSupported: []string{"RS256"}, IDTokenSigningAlgValues: []string{"RS256"},
TokenEndpointAuthMethodsSupported: []string{"client_secret_basic"}, TokenEndpointAuthMethodsSupported: []string{"client_secret_basic"},
} }

View file

@ -134,7 +134,7 @@ func (h *SendResetPasswordEmailHandler) validateRedirectURL(clientID string, red
return url.URL{}, false return url.URL{}, false
} }
validURL, err := client.ValidRedirectURL(parsed, cm.RedirectURLs) validURL, err := client.ValidRedirectURL(parsed, cm.RedirectURIs)
if err != nil { if err != nil {
log.Errorf("Invalid redirectURL for clientID: redirectURL:%q, clientID:%q", redirectURL, clientID) log.Errorf("Invalid redirectURL for clientID: redirectURL:%q, clientID:%q", redirectURL, clientID)
return url.URL{}, false return url.URL{}, false

View file

@ -110,19 +110,24 @@ func (s *Server) KillSession(sessionKey string) error {
return err return err
} }
func (s *Server) ProviderConfig() oidc.ProviderConfig { func (s *Server) pathURL(path string) *url.URL {
iss := s.IssuerURL.String() u := s.IssuerURL
cfg := oidc.ProviderConfig{ u.Path = path
Issuer: iss, return &u
}
AuthEndpoint: iss + httpPathAuth, func (s *Server) ProviderConfig() oidc.ProviderConfig {
TokenEndpoint: iss + httpPathToken, cfg := oidc.ProviderConfig{
KeysEndpoint: iss + httpPathKeys, Issuer: &s.IssuerURL,
AuthEndpoint: s.pathURL(httpPathAuth),
TokenEndpoint: s.pathURL(httpPathToken),
KeysEndpoint: s.pathURL(httpPathKeys),
GrantTypesSupported: []string{oauth2.GrantTypeAuthCode, oauth2.GrantTypeClientCreds}, GrantTypesSupported: []string{oauth2.GrantTypeAuthCode, oauth2.GrantTypeClientCreds},
ResponseTypesSupported: []string{"code"}, ResponseTypesSupported: []string{"code"},
SubjectTypesSupported: []string{"public"}, SubjectTypesSupported: []string{"public"},
IDTokenAlgValuesSupported: []string{"RS256"}, IDTokenSigningAlgValues: []string{"RS256"},
TokenEndpointAuthMethodsSupported: []string{"client_secret_basic"}, TokenEndpointAuthMethodsSupported: []string{"client_secret_basic"},
} }

View file

@ -17,6 +17,7 @@ import (
"github.com/coreos/go-oidc/key" "github.com/coreos/go-oidc/key"
"github.com/coreos/go-oidc/oauth2" "github.com/coreos/go-oidc/oauth2"
"github.com/coreos/go-oidc/oidc" "github.com/coreos/go-oidc/oidc"
"github.com/kylelemons/godebug/pretty"
) )
type StaticKeyManager struct { type StaticKeyManager struct {
@ -100,20 +101,21 @@ func TestServerProviderConfig(t *testing.T) {
srv := &Server{IssuerURL: url.URL{Scheme: "http", Host: "server.example.com"}} srv := &Server{IssuerURL: url.URL{Scheme: "http", Host: "server.example.com"}}
want := oidc.ProviderConfig{ want := oidc.ProviderConfig{
Issuer: "http://server.example.com", Issuer: &url.URL{Scheme: "http", Host: "server.example.com"},
AuthEndpoint: "http://server.example.com/auth", AuthEndpoint: &url.URL{Scheme: "http", Host: "server.example.com", Path: "/auth"},
TokenEndpoint: "http://server.example.com/token", TokenEndpoint: &url.URL{Scheme: "http", Host: "server.example.com", Path: "/token"},
KeysEndpoint: "http://server.example.com/keys", KeysEndpoint: &url.URL{Scheme: "http", Host: "server.example.com", Path: "/keys"},
GrantTypesSupported: []string{oauth2.GrantTypeAuthCode, oauth2.GrantTypeClientCreds}, GrantTypesSupported: []string{oauth2.GrantTypeAuthCode, oauth2.GrantTypeClientCreds},
ResponseTypesSupported: []string{"code"}, ResponseTypesSupported: []string{"code"},
SubjectTypesSupported: []string{"public"}, SubjectTypesSupported: []string{"public"},
IDTokenAlgValuesSupported: []string{"RS256"}, IDTokenSigningAlgValues: []string{"RS256"},
TokenEndpointAuthMethodsSupported: []string{"client_secret_basic"}, TokenEndpointAuthMethodsSupported: []string{"client_secret_basic"},
} }
got := srv.ProviderConfig() got := srv.ProviderConfig()
if !reflect.DeepEqual(want, got) { if diff := pretty.Compare(want, got); diff != "" {
t.Fatalf("want=%#v, got=%#v", want, got) t.Fatalf("provider config did not match expected: %s", diff)
} }
} }
@ -131,7 +133,7 @@ func TestServerNewSession(t *testing.T) {
Secret: "secrete", Secret: "secrete",
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{ url.URL{
Scheme: "http", Scheme: "http",
Host: "client.example.com", Host: "client.example.com",
@ -141,7 +143,7 @@ func TestServerNewSession(t *testing.T) {
}, },
} }
key, err := srv.NewSession("bogus_idpc", ci.Credentials.ID, state, ci.Metadata.RedirectURLs[0], nonce, false, []string{"openid"}) key, err := srv.NewSession("bogus_idpc", ci.Credentials.ID, state, ci.Metadata.RedirectURIs[0], nonce, false, []string{"openid"})
if err != nil { if err != nil {
t.Fatalf("Unexpected error: %v", err) t.Fatalf("Unexpected error: %v", err)
} }
@ -156,8 +158,8 @@ func TestServerNewSession(t *testing.T) {
t.Fatalf("Unable to add Identity to Session: %v", err) t.Fatalf("Unable to add Identity to Session: %v", err)
} }
if !reflect.DeepEqual(ci.Metadata.RedirectURLs[0], ses.RedirectURL) { if !reflect.DeepEqual(ci.Metadata.RedirectURIs[0], ses.RedirectURL) {
t.Fatalf("Session created with incorrect RedirectURL: want=%#v got=%#v", ci.Metadata.RedirectURLs[0], ses.RedirectURL) t.Fatalf("Session created with incorrect RedirectURL: want=%#v got=%#v", ci.Metadata.RedirectURIs[0], ses.RedirectURL)
} }
if ci.Credentials.ID != ses.ClientID { if ci.Credentials.ID != ses.ClientID {
@ -180,7 +182,7 @@ func TestServerLogin(t *testing.T) {
Secret: "secrete", Secret: "secrete",
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{ url.URL{
Scheme: "http", Scheme: "http",
Host: "client.example.com", Host: "client.example.com",
@ -197,7 +199,7 @@ func TestServerLogin(t *testing.T) {
sm := session.NewSessionManager(session.NewSessionRepo(), session.NewSessionKeyRepo()) sm := session.NewSessionManager(session.NewSessionRepo(), session.NewSessionKeyRepo())
sm.GenerateCode = staticGenerateCodeFunc("fakecode") sm.GenerateCode = staticGenerateCodeFunc("fakecode")
sessionID, err := sm.NewSession("test_connector_id", ci.Credentials.ID, "bogus", ci.Metadata.RedirectURLs[0], "", false, []string{"openid"}) sessionID, err := sm.NewSession("test_connector_id", ci.Credentials.ID, "bogus", ci.Metadata.RedirectURIs[0], "", false, []string{"openid"})
if err != nil { if err != nil {
t.Fatalf("Unexpected error: %v", err) t.Fatalf("Unexpected error: %v", err)
} }
@ -269,7 +271,7 @@ func TestServerLoginDisabledUser(t *testing.T) {
Secret: "secrete", Secret: "secrete",
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
url.URL{ url.URL{
Scheme: "http", Scheme: "http",
Host: "client.example.com", Host: "client.example.com",
@ -286,7 +288,7 @@ func TestServerLoginDisabledUser(t *testing.T) {
sm := session.NewSessionManager(session.NewSessionRepo(), session.NewSessionKeyRepo()) sm := session.NewSessionManager(session.NewSessionRepo(), session.NewSessionKeyRepo())
sm.GenerateCode = staticGenerateCodeFunc("fakecode") sm.GenerateCode = staticGenerateCodeFunc("fakecode")
sessionID, err := sm.NewSession("test_connector_id", ci.Credentials.ID, "bogus", ci.Metadata.RedirectURLs[0], "", false, []string{"openid"}) sessionID, err := sm.NewSession("test_connector_id", ci.Credentials.ID, "bogus", ci.Metadata.RedirectURIs[0], "", false, []string{"openid"})
if err != nil { if err != nil {
t.Fatalf("Unexpected error: %v", err) t.Fatalf("Unexpected error: %v", err)
} }

View file

@ -133,7 +133,7 @@ func makeTestFixtures() (*testFixtures, error) {
Secret: testClientSecret, Secret: testClientSecret,
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
testRedirectURL, testRedirectURL,
}, },
}, },

View file

@ -153,7 +153,7 @@ func (u *UsersAPI) CreateUser(creds Creds, usr schema.User, redirURL url.URL) (s
return schema.UserCreateResponse{}, mapError(err) return schema.UserCreateResponse{}, mapError(err)
} }
validRedirURL, err := client.ValidRedirectURL(&redirURL, metadata.RedirectURLs) validRedirURL, err := client.ValidRedirectURL(&redirURL, metadata.RedirectURIs)
if err != nil { if err != nil {
return schema.UserCreateResponse{}, ErrorInvalidRedirectURL return schema.UserCreateResponse{}, ErrorInvalidRedirectURL
} }

View file

@ -136,7 +136,7 @@ func makeTestFixtures() (*UsersAPI, *testEmailer) {
Secret: "secrete", Secret: "secrete",
}, },
Metadata: oidc.ClientMetadata{ Metadata: oidc.ClientMetadata{
RedirectURLs: []url.URL{ RedirectURIs: []url.URL{
validRedirURL, validRedirURL,
}, },
}, },