Error handling improvements (#71)
* Remove `emperror.dev/errors`, remove all `errors#Wrap` and `errors#WithStack` calls * Improve logging in `server/backup.go`
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"emperror.dev/errors"
|
||||
"fmt"
|
||||
"github.com/apex/log"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/pterodactyl/wings/server"
|
||||
"github.com/pterodactyl/wings/server/filesystem"
|
||||
"net/http"
|
||||
@@ -75,7 +75,7 @@ func (e *RequestError) AbortWithStatus(status int, c *gin.Context) {
|
||||
if status >= 500 {
|
||||
e.logger().WithField("error", e.Err).Error("encountered HTTP/500 error while handling request")
|
||||
|
||||
c.Error(errors.WithStackIf(e))
|
||||
c.Error(e)
|
||||
} else {
|
||||
e.logger().WithField("error", e.Err).Debug("encountered non-HTTP/500 error while handling request")
|
||||
}
|
||||
|
||||
@@ -3,9 +3,9 @@ package router
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"emperror.dev/errors"
|
||||
"github.com/apex/log"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/pterodactyl/wings/router/tokens"
|
||||
"github.com/pterodactyl/wings/server"
|
||||
"net/http"
|
||||
@@ -227,7 +227,7 @@ func deleteServer(c *gin.Context) {
|
||||
if err := os.RemoveAll(p); err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"path": p,
|
||||
"error": errors.WithStackIf(err),
|
||||
"error": err,
|
||||
}).Warn("failed to remove server files during deletion process")
|
||||
}
|
||||
}(s.Filesystem().Path())
|
||||
@@ -247,7 +247,9 @@ func deleteServer(c *gin.Context) {
|
||||
// preventing any JWT generated before the current time from being used to connect to
|
||||
// the socket or send along commands.
|
||||
func postServerDenyWSTokens(c *gin.Context) {
|
||||
var data struct{ JTIs []string `json:"jtis"` }
|
||||
var data struct {
|
||||
JTIs []string `json:"jtis"`
|
||||
}
|
||||
|
||||
if err := c.BindJSON(&data); err != nil {
|
||||
return
|
||||
|
||||
@@ -2,8 +2,8 @@ package router
|
||||
|
||||
import (
|
||||
"context"
|
||||
"emperror.dev/errors"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/pterodactyl/wings/router/tokens"
|
||||
"github.com/pterodactyl/wings/server"
|
||||
"github.com/pterodactyl/wings/server/filesystem"
|
||||
@@ -422,12 +422,12 @@ func postServerUploadFiles(c *gin.Context) {
|
||||
func handleFileUpload(p string, s *server.Server, header *multipart.FileHeader) error {
|
||||
file, err := header.Open()
|
||||
if err != nil {
|
||||
return errors.WithStackIf(err)
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
if err := s.Filesystem().Writefile(p, file); err != nil {
|
||||
return errors.WithStackIf(err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -4,12 +4,12 @@ import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"crypto/sha256"
|
||||
"emperror.dev/errors"
|
||||
"encoding/hex"
|
||||
"github.com/apex/log"
|
||||
"github.com/buger/jsonparser"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/mholt/archiver/v3"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/pterodactyl/wings/api"
|
||||
"github.com/pterodactyl/wings/config"
|
||||
"github.com/pterodactyl/wings/installer"
|
||||
@@ -157,7 +157,7 @@ func postTransfer(c *gin.Context) {
|
||||
// Make a new GET request to the URL the panel gave us.
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
log.WithField("error", errors.WithStackIf(err)).Error("failed to create http request for archive transfer")
|
||||
log.WithField("error", err).Error("failed to create http request for archive transfer")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ func postTransfer(c *gin.Context) {
|
||||
// Execute the http request.
|
||||
res, err := client.Do(req)
|
||||
if err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to send archive http request")
|
||||
l.WithField("error", err).Error("failed to send archive http request")
|
||||
return
|
||||
}
|
||||
defer res.Body.Close()
|
||||
@@ -176,12 +176,12 @@ func postTransfer(c *gin.Context) {
|
||||
if res.StatusCode != 200 {
|
||||
_, err := ioutil.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).WithField("status", res.StatusCode).Error("failed read transfer response body")
|
||||
l.WithField("error", err).WithField("status", res.StatusCode).Error("failed read transfer response body")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
l.WithField("error", errors.WithStackIf(err)).WithField("status", res.StatusCode).Error("failed to request server archive")
|
||||
l.WithField("error", err).WithField("status", res.StatusCode).Error("failed to request server archive")
|
||||
|
||||
return
|
||||
}
|
||||
@@ -193,12 +193,12 @@ func postTransfer(c *gin.Context) {
|
||||
_, err = os.Stat(archivePath)
|
||||
if err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to stat archive file")
|
||||
l.WithField("error", err).Error("failed to stat archive file")
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if err := os.Remove(archivePath); err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Warn("failed to remove old archive file")
|
||||
l.WithField("error", err).Warn("failed to remove old archive file")
|
||||
|
||||
return
|
||||
}
|
||||
@@ -207,7 +207,7 @@ func postTransfer(c *gin.Context) {
|
||||
// Create the file.
|
||||
file, err := os.Create(archivePath)
|
||||
if err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to open archive on disk")
|
||||
l.WithField("error", err).Error("failed to open archive on disk")
|
||||
|
||||
return
|
||||
}
|
||||
@@ -216,14 +216,14 @@ func postTransfer(c *gin.Context) {
|
||||
buf := make([]byte, 1024*4)
|
||||
_, err = io.CopyBuffer(file, res.Body, buf)
|
||||
if err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to copy archive file to disk")
|
||||
l.WithField("error", err).Error("failed to copy archive file to disk")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Close the file so it can be opened to verify the checksum.
|
||||
if err := file.Close(); err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to close archive file")
|
||||
l.WithField("error", err).Error("failed to close archive file")
|
||||
|
||||
return
|
||||
}
|
||||
@@ -233,7 +233,7 @@ func postTransfer(c *gin.Context) {
|
||||
// Open the archive file for computing a checksum.
|
||||
file, err = os.Open(archivePath)
|
||||
if err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to open archive on disk")
|
||||
l.WithField("error", err).Error("failed to open archive on disk")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -241,7 +241,7 @@ func postTransfer(c *gin.Context) {
|
||||
hash := sha256.New()
|
||||
buf = make([]byte, 1024*4)
|
||||
if _, err := io.CopyBuffer(hash, file, buf); err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to copy archive file for checksum verification")
|
||||
l.WithField("error", err).Error("failed to copy archive file for checksum verification")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -253,7 +253,7 @@ func postTransfer(c *gin.Context) {
|
||||
|
||||
// Close the file.
|
||||
if err := file.Close(); err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to close archive file after calculating checksum")
|
||||
l.WithField("error", err).Error("failed to close archive file after calculating checksum")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ func postTransfer(c *gin.Context) {
|
||||
// Create a new server installer (note this does not execute the install script)
|
||||
i, err := installer.New(serverData)
|
||||
if err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to validate received server data")
|
||||
l.WithField("error", err).Error("failed to validate received server data")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ func postTransfer(c *gin.Context) {
|
||||
|
||||
// Un-archive the archive. That sounds weird..
|
||||
if err := archiver.NewTarGz().Unarchive(archivePath, i.Server().Filesystem().Path()); err != nil {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to extract server archive")
|
||||
l.WithField("error", err).Error("failed to extract server archive")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -299,12 +299,11 @@ func postTransfer(c *gin.Context) {
|
||||
err = api.New().SendTransferSuccess(serverID)
|
||||
if err != nil {
|
||||
if !api.IsRequestError(err) {
|
||||
l.WithField("error", errors.WithStackIf(err)).Error("failed to notify panel of transfer success")
|
||||
l.WithField("error", err).Error("failed to notify panel of transfer success")
|
||||
return
|
||||
}
|
||||
|
||||
l.WithField("error", err.Error()).Error("panel responded with error after transfer success")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@ package websocket
|
||||
|
||||
import (
|
||||
"context"
|
||||
"emperror.dev/errors"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/apex/log"
|
||||
"github.com/gbrlsnchs/jwt/v3"
|
||||
"github.com/google/uuid"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/pterodactyl/wings/config"
|
||||
"github.com/pterodactyl/wings/environment"
|
||||
"github.com/pterodactyl/wings/environment/docker"
|
||||
@@ -41,10 +41,10 @@ type Handler struct {
|
||||
}
|
||||
|
||||
var (
|
||||
ErrJwtNotPresent = errors.Sentinel("jwt: no jwt present")
|
||||
ErrJwtNoConnectPerm = errors.Sentinel("jwt: missing connect permission")
|
||||
ErrJwtUuidMismatch = errors.Sentinel("jwt: server uuid mismatch")
|
||||
ErrJwtOnDenylist = errors.Sentinel("jwt: created too far in past (denylist)")
|
||||
ErrJwtNotPresent = errors.New("jwt: no jwt present")
|
||||
ErrJwtNoConnectPerm = errors.New("jwt: missing connect permission")
|
||||
ErrJwtUuidMismatch = errors.New("jwt: server uuid mismatch")
|
||||
ErrJwtOnDenylist = errors.New("jwt: created too far in past (denylist)")
|
||||
)
|
||||
|
||||
func IsJwtError(err error) bool {
|
||||
@@ -108,7 +108,7 @@ func GetHandler(s *server.Server, w http.ResponseWriter, r *http.Request) (*Hand
|
||||
|
||||
u, err := uuid.NewRandom()
|
||||
if err != nil {
|
||||
return nil, errors.WithStackIf(err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Handler{
|
||||
|
||||
Reference in New Issue
Block a user