Skip to content

Commit 2582887

Browse files
Merge pull request #9 from depot/api-errors
2 parents f8e3c9c + 5023690 commit 2582887

File tree

3 files changed

+62
-20
lines changed

3 files changed

+62
-20
lines changed

pkg/api/api.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,13 @@ func (d *Depot) InitBuild(projectID string) (*InitResponse, error) {
5959
return nil, err
6060
}
6161

62+
errorResponse, _ := tryParseErrorResponse(body)
63+
if errorResponse != nil {
64+
return nil, fmt.Errorf("%s", errorResponse.Error)
65+
}
66+
6267
var response InitResponse
63-
err = json.Unmarshal([]byte(body), &response)
68+
err = json.Unmarshal(body, &response)
6469
if err != nil {
6570
return nil, err
6671
}
@@ -86,5 +91,15 @@ func (d *Depot) FinishBuild(buildID string) error {
8691
}
8792
defer resp.Body.Close()
8893

94+
body, err := ioutil.ReadAll(resp.Body)
95+
if err != nil {
96+
return err
97+
}
98+
99+
errorResponse, _ := tryParseErrorResponse(body)
100+
if errorResponse != nil {
101+
return fmt.Errorf("%s", errorResponse.Error)
102+
}
103+
89104
return nil
90105
}

pkg/api/auth.go

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"encoding/json"
66
"fmt"
7+
"io/ioutil"
78
"net/http"
89
"time"
910

@@ -31,17 +32,23 @@ type TokenErrorResponse struct {
3132
}
3233

3334
func (d *Depot) AuthorizeDevice() (*TokenResponse, error) {
34-
res, err := http.Post(fmt.Sprintf("%s/api/internal/cli/auth-request", d.BaseURL), "application/json", nil)
35+
resp, err := http.Post(fmt.Sprintf("%s/api/internal/cli/auth-request", d.BaseURL), "application/json", nil)
3536
if err != nil {
3637
return nil, err
3738
}
3839

39-
if res.StatusCode != http.StatusOK {
40-
return nil, fmt.Errorf("unexpected status code: %d", res.StatusCode)
40+
body, err := ioutil.ReadAll(resp.Body)
41+
if err != nil {
42+
return nil, err
43+
}
44+
45+
errorResponse, _ := tryParseErrorResponse(body)
46+
if errorResponse != nil {
47+
return nil, fmt.Errorf("%s", errorResponse.Error)
4148
}
4249

4350
var response CLIAuthenticationResponse
44-
err = json.NewDecoder(res.Body).Decode(&response)
51+
err = json.Unmarshal(body, &response)
4552
if err != nil {
4653
return nil, err
4754
}
@@ -70,30 +77,30 @@ func (d *Depot) AuthorizeDevice() (*TokenResponse, error) {
7077
return nil, err
7178
}
7279

73-
res, err := http.Post(response.TokenURL, "application/json", bytes.NewBuffer(tokenRequestBody))
80+
resp, err := http.Post(response.TokenURL, "application/json", bytes.NewBuffer(tokenRequestBody))
7481
if err != nil {
7582
return nil, err
7683
}
7784

78-
if res.StatusCode == http.StatusOK {
79-
var tokenResponse TokenResponse
80-
err = json.NewDecoder(res.Body).Decode(&tokenResponse)
81-
if err != nil {
82-
return nil, err
83-
}
84-
return &tokenResponse, nil
85-
}
86-
87-
var errorResponse TokenErrorResponse
88-
err = json.NewDecoder(res.Body).Decode(&errorResponse)
85+
body, err := ioutil.ReadAll(resp.Body)
8986
if err != nil {
9087
return nil, err
9188
}
9289

93-
if errorResponse.Error == "authorization_pending" {
94-
continue
90+
errorResponse, _ := tryParseErrorResponse(body)
91+
if errorResponse != nil {
92+
if errorResponse.Error == "authorization_pending" {
93+
continue
94+
}
95+
96+
return nil, fmt.Errorf("error getting access token: %s", errorResponse.Error)
9597
}
9698

97-
return nil, fmt.Errorf("error getting access token: %s", errorResponse.Error)
99+
var response TokenResponse
100+
err = json.Unmarshal(body, &response)
101+
if err != nil {
102+
return nil, err
103+
}
104+
return &response, nil
98105
}
99106
}

pkg/api/errors.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package api
2+
3+
import "encoding/json"
4+
5+
type ErrorResponse struct {
6+
OK bool `json:"ok"`
7+
Error string `json:"error"`
8+
}
9+
10+
func tryParseErrorResponse(body []byte) (*ErrorResponse, error) {
11+
var response ErrorResponse
12+
err := json.Unmarshal(body, &response)
13+
if err != nil {
14+
return nil, err
15+
}
16+
if response.OK {
17+
return nil, nil
18+
}
19+
return &response, nil
20+
}

0 commit comments

Comments
 (0)