feat: let the server crash fast when the data folder becomes unavailable
This commit is contained in:
74
app/http.go
74
app/http.go
@@ -82,32 +82,25 @@ func httpGetFiles(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
|
|||||||
json.NewEncoder(w).Encode([]FileInfo{})
|
json.NewEncoder(w).Encode([]FileInfo{})
|
||||||
}
|
}
|
||||||
|
|
||||||
entries, err := os.ReadDir(config.GetPathDataFolder())
|
files, err := filesystem.GetFileListOfDataFolder()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
log.Fatalf("[Error] %v", err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
files := make([]FileInfo, 0, len(entries))
|
fileInfos := make([]FileInfo, 0, len(files))
|
||||||
|
|
||||||
for _, entry := range entries {
|
for filename, sizeInBytes := range files {
|
||||||
if entry.IsDir() {
|
fileInfos = append(
|
||||||
continue
|
fileInfos,
|
||||||
}
|
FileInfo{
|
||||||
|
Name: filename,
|
||||||
info, err := entry.Info()
|
Size: sizeInBytes,
|
||||||
if err != nil {
|
},
|
||||||
continue
|
)
|
||||||
}
|
|
||||||
|
|
||||||
files = append(files, FileInfo{
|
|
||||||
Name: info.Name(),
|
|
||||||
Size: info.Size(),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
json.NewEncoder(w).Encode(files)
|
json.NewEncoder(w).Encode(fileInfos)
|
||||||
}
|
}
|
||||||
|
|
||||||
func httpGetFilesDeleteFilename(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
func httpGetFilesDeleteFilename(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
@@ -121,25 +114,10 @@ func httpGetFilesDeleteFilename(w http.ResponseWriter, r *http.Request, ps httpr
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
entries, err := os.ReadDir(config.GetPathDataFolder())
|
|
||||||
if err != nil {
|
|
||||||
http.Error(w, "500 Internal Server Error", http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
files := map[string]int64{}
|
|
||||||
for _, entry := range entries {
|
|
||||||
if entry.IsDir() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
info, err := entry.Info()
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
files[info.Name()] = info.Size()
|
|
||||||
}
|
|
||||||
|
|
||||||
filename := ps.ByName("filename")
|
filename := ps.ByName("filename")
|
||||||
|
|
||||||
|
files, err := filesystem.GetFileListOfDataFolder()
|
||||||
|
|
||||||
sizeInBytes, fileExists := files[filename]
|
sizeInBytes, fileExists := files[filename]
|
||||||
if !fileExists {
|
if !fileExists {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
@@ -147,8 +125,7 @@ func httpGetFilesDeleteFilename(w http.ResponseWriter, r *http.Request, ps httpr
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fullPath := filepath.Join(config.GetPathDataFolder(), filename)
|
err = filesystem.DeleteFile(filename)
|
||||||
err = os.Remove(fullPath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "500 Internal Server Error", http.StatusInternalServerError)
|
http.Error(w, "500 Internal Server Error", http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
@@ -167,15 +144,19 @@ func httpGetFilesGetFilename(w http.ResponseWriter, r *http.Request, ps httprout
|
|||||||
}
|
}
|
||||||
|
|
||||||
filename := ps.ByName("filename")
|
filename := ps.ByName("filename")
|
||||||
filePath := filepath.Join(config.GetPathDataFolder(), filename)
|
|
||||||
|
|
||||||
info, err := os.Stat(filePath)
|
files, err := filesystem.GetFileListOfDataFolder()
|
||||||
if err != nil || info.IsDir() {
|
if err != nil {
|
||||||
|
log.Fatalf("[Error] %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sizeInBytes, fileExists := files[filename]
|
||||||
|
if !fileExists {
|
||||||
http.Error(w, "404 File Not Found", http.StatusNotFound)
|
http.Error(w, "404 File Not Found", http.StatusNotFound)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("| Download | %-21s | %-10s | %s\n", getClientIP(r), filesystem.GetHumanReadableSize(info.Size()), filename)
|
log.Printf("| Download | %-21s | %-10s | %s\n", getClientIP(r), filesystem.GetHumanReadableSize(sizeInBytes), filename)
|
||||||
|
|
||||||
extension := strings.ToLower(filepath.Ext(filename))
|
extension := strings.ToLower(filepath.Ext(filename))
|
||||||
mimeType := mime.TypeByExtension(extension)
|
mimeType := mime.TypeByExtension(extension)
|
||||||
@@ -190,7 +171,7 @@ func httpGetFilesGetFilename(w http.ResponseWriter, r *http.Request, ps httprout
|
|||||||
w.Header().Set("Content-Disposition", "attachment; filename=\""+filename+"\"")
|
w.Header().Set("Content-Disposition", "attachment; filename=\""+filename+"\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
http.ServeFile(w, r, filePath)
|
http.ServeFile(w, r, filepath.Join(config.GetPathDataFolder(), filename))
|
||||||
}
|
}
|
||||||
|
|
||||||
func httpGetRoot(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
func httpGetRoot(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
@@ -214,6 +195,11 @@ func httpPostUpload(w http.ResponseWriter, r *http.Request, ps httprouter.Params
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err := filesystem.GetFileListOfDataFolder()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("[Error] %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
reader, err := r.MultipartReader()
|
reader, err := r.MultipartReader()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, fmt.Sprintf("Could not get multipart reader: %v", err), http.StatusBadRequest)
|
http.Error(w, fmt.Sprintf("Could not get multipart reader: %v", err), http.StatusBadRequest)
|
||||||
|
Reference in New Issue
Block a user