X Tutup
Skip to content

Commit 2086ecb

Browse files
committed
Fix printing network error in case for failed HTTP requests
The CheckScopes middleware tried to read from `res.Headers` before it verified that `res` is available.
1 parent 1f97a9a commit 2086ecb

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

api/client.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,15 @@ func CheckScopes(wantedScope string, cb func(string) error) ClientOption {
104104
return func(tr http.RoundTripper) http.RoundTripper {
105105
return &funcTripper{roundTrip: func(req *http.Request) (*http.Response, error) {
106106
res, err := tr.RoundTrip(req)
107-
_, hasHeader := res.Header[httpOAuthAppID]
108-
if err != nil || res.StatusCode > 299 || !hasHeader || issuedScopesWarning {
107+
if err != nil || res.StatusCode > 299 || issuedScopesWarning {
109108
return res, err
110109
}
111110

111+
_, hasHeader := res.Header[httpOAuthAppID]
112+
if !hasHeader {
113+
return res, nil
114+
}
115+
112116
appID := res.Header.Get(httpOAuthAppID)
113117
hasScopes := strings.Split(res.Header.Get(httpOAuthScopes), ",")
114118

api/client_test.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ func Test_CheckScopes(t *testing.T) {
102102
wantScope string
103103
responseApp string
104104
responseScopes string
105+
responseError error
105106
expectCallback bool
106107
}{
107108
{
@@ -132,11 +133,22 @@ func Test_CheckScopes(t *testing.T) {
132133
responseScopes: "",
133134
expectCallback: false,
134135
},
136+
{
137+
name: "errored response",
138+
wantScope: "read:org",
139+
responseApp: "",
140+
responseScopes: "",
141+
responseError: errors.New("Network Failed"),
142+
expectCallback: false,
143+
},
135144
}
136145
for _, tt := range tests {
137146
t.Run(tt.name, func(t *testing.T) {
138147
tr := &httpmock.Registry{}
139148
tr.Register(httpmock.MatchAny, func(*http.Request) (*http.Response, error) {
149+
if tt.responseError != nil {
150+
return nil, tt.responseError
151+
}
140152
if tt.responseScopes == "" {
141153
return &http.Response{StatusCode: 200}, nil
142154
}
@@ -165,7 +177,7 @@ func Test_CheckScopes(t *testing.T) {
165177

166178
issuedScopesWarning = false
167179
_, err = rt.RoundTrip(req)
168-
if err != nil {
180+
if err != nil && !errors.Is(err, tt.responseError) {
169181
t.Fatalf("unexpected error: %v", err)
170182
}
171183

0 commit comments

Comments
 (0)
X Tutup