Skip to content

Commit 7cbe1bd

Browse files
committed
[TT-14494] improve error logging for JWKS URL handling - visor comments
1 parent 19cd844 commit 7cbe1bd

2 files changed

Lines changed: 17 additions & 34 deletions

File tree

gateway/log_helpers.go

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,13 @@ func (gw *Gateway) logJWKError(logger *logrus.Entry, jwkURL string, err error) {
7777
return
7878
}
7979

80+
errStr := err.Error()
81+
8082
// content/JSON errors
8183
var syntaxErr *json.SyntaxError
8284
var unmarshalErr *json.UnmarshalTypeError
83-
if errors.As(err, &syntaxErr) || errors.As(err, &unmarshalErr) || strings.Contains(err.Error(), "invalid character") {
85+
86+
if errors.As(err, &syntaxErr) || errors.As(err, &unmarshalErr) || strings.Contains(errStr, "invalid character") {
8487
logger.WithError(err).Errorf("Invalid JWKS retrieved from endpoint: %s", jwkURL)
8588
return
8689
}
@@ -90,30 +93,14 @@ func (gw *Gateway) logJWKError(logger *logrus.Entry, jwkURL string, err error) {
9093
var netOpErr *net.OpError
9194
var dnsErr *net.DNSError
9295

93-
if errors.As(err, &urlErr) {
94-
logger.WithError(err).Errorf("JWKS endpoint resolution failed: invalid or unreachable host %s", jwkURL)
95-
return
96-
}
97-
98-
// DNS errors
99-
if errors.As(err, &dnsErr) {
100-
logger.WithError(err).Errorf("JWKS endpoint resolution failed: invalid or unreachable host %s", jwkURL)
101-
return
102-
}
103-
104-
// connection refused
105-
if errors.As(err, &netOpErr) {
106-
if errors.Is(netOpErr, syscall.ECONNREFUSED) {
107-
logger.WithError(err).Errorf("JWKS endpoint resolution failed: invalid or unreachable host %s", jwkURL)
108-
return
109-
}
110-
}
111-
112-
// fallback check strings
113-
errStr := err.Error()
114-
if strings.Contains(errStr, "dial tcp") ||
96+
isNetworkError := errors.As(err, &urlErr) ||
97+
errors.As(err, &dnsErr) ||
98+
(errors.As(err, &netOpErr) && errors.Is(netOpErr, syscall.ECONNREFUSED)) ||
99+
strings.Contains(errStr, "dial tcp") ||
115100
strings.Contains(errStr, "no such host") ||
116-
strings.Contains(errStr, "connection refused") {
101+
strings.Contains(errStr, "connection refused")
102+
103+
if isNetworkError {
117104
logger.WithError(err).Errorf("JWKS endpoint resolution failed: invalid or unreachable host %s", jwkURL)
118105
return
119106
}

gateway/log_helpers_test.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"net"
77
"net/http/httptest"
88
"net/url"
9+
"reflect"
910
"syscall"
1011
"testing"
1112

@@ -168,8 +169,11 @@ func TestGatewayLogJWKError(t *testing.T) {
168169
shouldLog: true,
169170
},
170171
{
171-
name: "JSON Unmarshal Type Error",
172-
err: &json.UnmarshalTypeError{},
172+
name: "JSON Unmarshal Type Error",
173+
err: &json.UnmarshalTypeError{
174+
Value: "number",
175+
Type: reflect.TypeOf(""),
176+
},
173177
expectedLog: "Invalid JWKS retrieved from endpoint: " + testURL,
174178
shouldLog: true,
175179
},
@@ -209,12 +213,6 @@ func TestGatewayLogJWKError(t *testing.T) {
209213
expectedLog: "JWKS endpoint resolution failed: invalid or unreachable host " + testURL,
210214
shouldLog: true,
211215
},
212-
{
213-
name: "String error containing 'connection refused'",
214-
err: errors.New("connect: connection refused"),
215-
expectedLog: "JWKS endpoint resolution failed: invalid or unreachable host " + testURL,
216-
shouldLog: true,
217-
},
218216
{
219217
name: "Generic/Fallback Error",
220218
err: errors.New("unknown internal server error"),
@@ -236,9 +234,7 @@ func TestGatewayLogJWKError(t *testing.T) {
236234

237235
assert.Len(t, hook.Entries, 1)
238236
assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level)
239-
240237
assert.Equal(t, tc.expectedLog, hook.LastEntry().Message)
241-
242238
assert.Equal(t, tc.err, hook.LastEntry().Data["error"])
243239
})
244240
}

0 commit comments

Comments
 (0)