Fix files not being editable correctly in the panel; closes pterodactyl/panel#2679

This commit is contained in:
Dane Everitt 2020-11-08 17:06:40 -08:00
parent de0c67d066
commit 20ece60a72
No known key found for this signature in database
GPG Key ID: EEA66103B3D71F53
2 changed files with 23 additions and 10 deletions

View File

@ -1,5 +1,9 @@
# Changelog # Changelog
## v1.1.1
### Fixed
* Fixes certain files returning invalid data in the request due to a bad header set after sending data down the line.
## v1.1.0 ## v1.1.0
This release **requires** `Panel@1.1.0` or later to run due to API changes. This release **requires** `Panel@1.1.0` or later to run due to API changes.

View File

@ -35,10 +35,6 @@ func getServerFileContents(c *gin.Context) {
return return
} }
if err := s.Filesystem().Readfile(p, c.Writer); err != nil {
TrackedServerError(err, s).AbortFilesystemError(c)
return
} else {
c.Header("X-Mime-Type", st.Mimetype) c.Header("X-Mime-Type", st.Mimetype)
c.Header("Content-Length", strconv.Itoa(int(st.Info.Size()))) c.Header("Content-Length", strconv.Itoa(int(st.Info.Size())))
@ -48,6 +44,19 @@ func getServerFileContents(c *gin.Context) {
c.Header("Content-Disposition", "attachment; filename="+st.Info.Name()) c.Header("Content-Disposition", "attachment; filename="+st.Info.Name())
c.Header("Content-Type", "application/octet-stream") c.Header("Content-Type", "application/octet-stream")
} }
// TODO(dane): should probably come up with a different approach here. If an error is encountered
// by this Readfile call you'll end up causing a (recovered) panic in the program because so many
// headers have already been set. We should probably add a RawReadfile that just returns the file
// to be read and then we can stream from that safely without error.
//
// Until that becomes a problem though I'm just going to leave this how it is. The panic is recovered
// and a normal 500 error is returned to the client to my knowledge. It is also very unlikely to
// happen since we're doing so much before this point that would normally throw an error if there
// was a problem with the file.
if err := s.Filesystem().Readfile(p, c.Writer); err != nil {
TrackedServerError(err, s).AbortFilesystemError(c)
return
} }
} }