Don't treat certain "expected" errors from the filesystem as 500 errors; closes pterodactyl/panel#2376
This commit is contained in:
parent
033e8e7573
commit
d8cd8ae36a
|
@ -247,6 +247,13 @@ func postServerWriteFile(c *gin.Context) {
|
||||||
f = "/" + strings.TrimLeft(f, "/")
|
f = "/" + strings.TrimLeft(f, "/")
|
||||||
|
|
||||||
if err := s.Filesystem.Writefile(f, c.Request.Body); err != nil {
|
if err := s.Filesystem.Writefile(f, c.Request.Body); err != nil {
|
||||||
|
if errors.Is(err, server.ErrIsDirectory) {
|
||||||
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
|
||||||
|
"error": "Cannot write file, name conflicts with an existing directory by the same name.",
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
TrackedServerError(err, s).AbortWithServerError(c)
|
TrackedServerError(err, s).AbortWithServerError(c)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -268,6 +275,13 @@ func postServerCreateDirectory(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.Filesystem.CreateDirectory(data.Name, data.Path); err != nil {
|
if err := s.Filesystem.CreateDirectory(data.Name, data.Path); err != nil {
|
||||||
|
if err.Error() == "not a directory" {
|
||||||
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
|
||||||
|
"error": "Part of the path being created is not a directory (ENOTDIR).",
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
TrackedServerError(err, s).AbortWithServerError(c)
|
TrackedServerError(err, s).AbortWithServerError(c)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ import (
|
||||||
// Error returned when there is a bad path provided to one of the FS calls.
|
// Error returned when there is a bad path provided to one of the FS calls.
|
||||||
type PathResolutionError struct{}
|
type PathResolutionError struct{}
|
||||||
|
|
||||||
|
var ErrIsDirectory = errors.New("is a directory")
|
||||||
var ErrNotEnoughDiskSpace = errors.New("not enough disk space is available to perform this operation")
|
var ErrNotEnoughDiskSpace = errors.New("not enough disk space is available to perform this operation")
|
||||||
|
|
||||||
// Returns the error response in a string form that can be more easily consumed.
|
// Returns the error response in a string form that can be more easily consumed.
|
||||||
|
@ -396,7 +397,7 @@ func (fs *Filesystem) Writefile(p string, r io.Reader) error {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if stat.IsDir() {
|
if stat.IsDir() {
|
||||||
return errors.New("cannot write file contents to a directory")
|
return ErrIsDirectory
|
||||||
}
|
}
|
||||||
|
|
||||||
currentSize = stat.Size()
|
currentSize = stat.Size()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user