feat: let the server crash fast when the data folder becomes unavailable

This commit is contained in:
2025-09-03 22:51:49 +02:00
parent 62064721d0
commit 419a7e5c1a

View File

@@ -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)