Made the directory listing not uber-broken, made it serve index.html by default

Signed-off-by: arzumify <jliwin98@danwin1210.de>
This commit is contained in:
Tracker-Friendly 2024-11-03 12:07:53 +00:00
parent d25e0a4877
commit 7b1188545d
1 changed files with 21 additions and 24 deletions

45
main.go
View File

@ -281,30 +281,20 @@ func listDirectory(w http.ResponseWriter, r *http.Request, root string) {
slog.Error("Error writing directory listing: " + err.Error()) slog.Error("Error writing directory listing: " + err.Error())
return return
} }
err = filepath.Walk(filepath.Join(root, filepath.FromSlash(r.URL.Path)), func(path string, info os.FileInfo, err error) error { entries, err := os.ReadDir(filepath.Join(root, filepath.FromSlash(r.URL.Path)))
if err != nil {
return err
}
relPath, err := filepath.Rel(root, path)
if err != nil {
return err
}
if relPath == "." {
return nil
}
_, err = w.Write([]byte("<li><a href=\"" + relPath + "\">" + info.Name() + "</a></li>"))
if err != nil {
serverError(w, 500)
slog.Error("Error writing directory: " + err.Error())
return err
}
return nil
})
if err != nil { if err != nil {
serverError(w, 500) serverError(w, 500)
slog.Error("Error walking directory: " + err.Error()) slog.Error("Error listing directory: " + err.Error())
return return
} }
for _, entry := range entries {
_, err = w.Write([]byte("<li><a href=\"" + entry.Name() + "\">" + entry.Name() + "</a></li>"))
if err != nil {
serverError(w, 500)
slog.Error("Error writing directory listing: " + err.Error())
return
}
}
_, err = w.Write([]byte("</ul></body></html>")) _, err = w.Write([]byte("</ul></body></html>"))
if err != nil { if err != nil {
serverError(w, 500) serverError(w, 500)
@ -391,12 +381,19 @@ func newFileServer(root string, directoryListing bool) http.Handler {
} }
if stat.IsDir() { if stat.IsDir() {
if directoryListing { // See if index.html exists
listDirectory(w, r, root) _, err := os.Stat(filepath.Join(root, filepath.FromSlash(r.URL.Path), "index.html"))
if err != nil {
if directoryListing {
listDirectory(w, r, root)
} else {
serverError(w, 403)
}
return
} else { } else {
serverError(w, 403) // Serve the index.html file
r.URL.Path = filepath.Join(r.URL.Path, "index.html")
} }
return
} }
file, err := os.Open(filepath.Join(root, filepath.FromSlash(r.URL.Path))) file, err := os.Open(filepath.Join(root, filepath.FromSlash(r.URL.Path)))