Fix missing error handling for server configuration endpoints
This commit is contained in:
parent
2a98faf360
commit
8897be661b
|
@ -4,7 +4,6 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
@ -12,6 +11,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"emperror.dev/errors"
|
||||||
"github.com/apex/log"
|
"github.com/apex/log"
|
||||||
"github.com/pterodactyl/wings/system"
|
"github.com/pterodactyl/wings/system"
|
||||||
)
|
)
|
||||||
|
@ -98,21 +98,19 @@ func (c *client) requestOnce(ctx context.Context, method, path string, body io.R
|
||||||
|
|
||||||
// request executes a http request and retries when errors occur.
|
// request executes a http request and retries when errors occur.
|
||||||
// It appends the path to the endpoint of the client and adds the authentication token to the request.
|
// It appends the path to the endpoint of the client and adds the authentication token to the request.
|
||||||
func (c *client) request(ctx context.Context, method, path string, body io.Reader, opts ...func(r *http.Request)) (*Response, error) {
|
func (c *client) request(ctx context.Context, method, path string, body io.Reader, opts ...func(r *http.Request)) (res *Response, err error) {
|
||||||
var doErr error
|
|
||||||
var res *Response
|
|
||||||
|
|
||||||
for i := 0; i < c.retries; i++ {
|
for i := 0; i < c.retries; i++ {
|
||||||
res, doErr = c.requestOnce(ctx, method, path, body, opts...)
|
res, err = c.requestOnce(ctx, method, path, body, opts...)
|
||||||
|
if err == nil &&
|
||||||
if doErr == nil &&
|
|
||||||
res.StatusCode < http.StatusInternalServerError &&
|
res.StatusCode < http.StatusInternalServerError &&
|
||||||
res.StatusCode != http.StatusTooManyRequests {
|
res.StatusCode != http.StatusTooManyRequests {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
return res, doErr
|
return nil, errors.WithStack(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// get executes a http get request.
|
// get executes a http get request.
|
||||||
|
@ -159,7 +157,7 @@ func (r *Response) HasError() bool {
|
||||||
func (r *Response) Read() ([]byte, error) {
|
func (r *Response) Read() ([]byte, error) {
|
||||||
var b []byte
|
var b []byte
|
||||||
if r.Response == nil {
|
if r.Response == nil {
|
||||||
return nil, errors.New("no response exists on interface")
|
return nil, errors.New("http: attempting to read missing response")
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.Response.Body != nil {
|
if r.Response.Body != nil {
|
||||||
|
@ -180,7 +178,10 @@ func (r *Response) BindJSON(v interface{}) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return json.Unmarshal(b, &v)
|
if err := json.Unmarshal(b, &v); err != nil {
|
||||||
|
return errors.Wrap(err, "http: could not unmarshal response")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the first error message from the API call as a string. The error
|
// Returns the first error message from the API call as a string. The error
|
||||||
|
|
|
@ -75,7 +75,7 @@ func (c *client) GetServerConfiguration(ctx context.Context, uuid string) (Serve
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
|
|
||||||
if res.HasError() {
|
if res.HasError() {
|
||||||
return config, err
|
return config, res.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
err = res.BindJSON(&config)
|
err = res.BindJSON(&config)
|
||||||
|
@ -90,7 +90,7 @@ func (c *client) GetInstallationScript(ctx context.Context, uuid string) (Instal
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
|
|
||||||
if res.HasError() {
|
if res.HasError() {
|
||||||
return InstallationScript{}, err
|
return InstallationScript{}, res.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
var config InstallationScript
|
var config InstallationScript
|
||||||
|
@ -140,6 +140,7 @@ func (c *client) ValidateSftpCredentials(ctx context.Context, request SftpAuthRe
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return auth, err
|
return auth, err
|
||||||
}
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
|
||||||
e := res.Error()
|
e := res.Error()
|
||||||
if e != nil {
|
if e != nil {
|
||||||
|
@ -185,7 +186,6 @@ func (c *client) SetBackupStatus(ctx context.Context, backup string, data Backup
|
||||||
return resp.Error()
|
return resp.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// SendRestorationStatus triggers a request to the Panel to notify it that a
|
// SendRestorationStatus triggers a request to the Panel to notify it that a
|
||||||
// restoration has been completed and the server should be marked as being
|
// restoration has been completed and the server should be marked as being
|
||||||
// activated again.
|
// activated again.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user