Skip to content

Commit 3b64e79

Browse files
ay4toh5imuhlemmer
andauthoredSep 20, 2024
feat(oidc): return defined error when discovery failed (#653)
* feat(oidc): return defined error when discovery failed * Use errors.Join() to join errors Co-authored-by: Tim Möhlmann <muhlemmer@gmail.com> * Remove unnecessary field Co-authored-by: Tim Möhlmann <muhlemmer@gmail.com> * Fix order and message Co-authored-by: Tim Möhlmann <muhlemmer@gmail.com> * Fix error order * Simplify error assertion Co-authored-by: Tim Möhlmann <muhlemmer@gmail.com> --------- Co-authored-by: Tim Möhlmann <muhlemmer@gmail.com>
1 parent b555396 commit 3b64e79

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed
 

‎pkg/client/client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func Discover(ctx context.Context, issuer string, httpClient *http.Client, wellK
4242
discoveryConfig := new(oidc.DiscoveryConfiguration)
4343
err = httphelper.HttpRequest(httpClient, req, &discoveryConfig)
4444
if err != nil {
45-
return nil, err
45+
return nil, errors.Join(oidc.ErrDiscoveryFailed, err)
4646
}
4747
if logger, ok := logging.FromContext(ctx); ok {
4848
logger.Debug("discover", "config", discoveryConfig)

‎pkg/client/client_test.go

+11-7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/stretchr/testify/assert"
99
"github.com/stretchr/testify/require"
10+
"github.com/zitadel/oidc/v3/pkg/oidc"
1011
)
1112

1213
func TestDiscover(t *testing.T) {
@@ -22,7 +23,7 @@ func TestDiscover(t *testing.T) {
2223
name string
2324
args args
2425
wantFields *wantFields
25-
wantErr bool
26+
wantErr error
2627
}{
2728
{
2829
name: "spotify", // https://github.com/zitadel/oidc/issues/406
@@ -32,17 +33,20 @@ func TestDiscover(t *testing.T) {
3233
wantFields: &wantFields{
3334
UILocalesSupported: true,
3435
},
35-
wantErr: false,
36+
wantErr: nil,
37+
},
38+
{
39+
name: "discovery failed",
40+
args: args{
41+
issuer: "https://example.com",
42+
},
43+
wantErr: oidc.ErrDiscoveryFailed,
3644
},
3745
}
3846
for _, tt := range tests {
3947
t.Run(tt.name, func(t *testing.T) {
4048
got, err := Discover(context.Background(), tt.args.issuer, http.DefaultClient, tt.args.wellKnownUrl...)
41-
if tt.wantErr {
42-
assert.Error(t, err)
43-
return
44-
}
45-
require.NoError(t, err)
49+
require.ErrorIs(t, err, tt.wantErr)
4650
if tt.wantFields == nil {
4751
return
4852
}

‎pkg/oidc/verifier.go

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ type IDClaims interface {
4141
var (
4242
ErrParse = errors.New("parsing of request failed")
4343
ErrIssuerInvalid = errors.New("issuer does not match")
44+
ErrDiscoveryFailed = errors.New("OpenID Provider Configuration Discovery has failed")
4445
ErrSubjectMissing = errors.New("subject missing")
4546
ErrAudience = errors.New("audience is not valid")
4647
ErrAzpMissing = errors.New("authorized party is not set. If Token is valid for multiple audiences, azp must not be empty")

0 commit comments

Comments
 (0)