More and better error logging.

This commit is contained in:
Solderpunk 2020-07-01 22:58:07 +02:00
parent f7e588dfae
commit 3cd4a072fd
2 changed files with 14 additions and 6 deletions

View File

@ -12,11 +12,11 @@ import (
"strings" "strings"
) )
func generateDirectoryListing(URL *url.URL, path string, config Config) string { func generateDirectoryListing(URL *url.URL, path string, config Config) (string, error) {
var listing string var listing string
files, err := ioutil.ReadDir(path) files, err := ioutil.ReadDir(path)
if err != nil { if err != nil {
log.Fatal(err) return listing, err
} }
listing = "# Directory listing\n\n" listing = "# Directory listing\n\n"
// Override with .mollyhead file // Override with .mollyhead file
@ -24,9 +24,10 @@ func generateDirectoryListing(URL *url.URL, path string, config Config) string {
_, err = os.Stat(header_path) _, err = os.Stat(header_path)
if err == nil { if err == nil {
header, err := ioutil.ReadFile(header_path) header, err := ioutil.ReadFile(header_path)
if err == nil { if err != nil {
listing = string(header) return listing, err
} }
listing = string(header)
} }
// Do "up" link first // Do "up" link first
if URL.Path != "/" { if URL.Path != "/" {
@ -62,7 +63,7 @@ func generateDirectoryListing(URL *url.URL, path string, config Config) string {
} }
listing += fmt.Sprintf("=> %s %s\n", url.PathEscape(file.Name()), generatePrettyFileLabel(file, path, config)) listing += fmt.Sprintf("=> %s %s\n", url.PathEscape(file.Name()), generatePrettyFileLabel(file, path, config))
} }
return listing return listing, nil
} }
func generatePrettyFileLabel(info os.FileInfo, path string, config Config) string { func generatePrettyFileLabel(info os.FileInfo, path string, config Config) string {

View File

@ -277,9 +277,16 @@ func serveDirectory(URL *url.URL, path string, log *LogEntry, conn net.Conn, con
serveFile(index_path, log, conn, config, errorLog) serveFile(index_path, log, conn, config, errorLog)
// Serve a generated listing // Serve a generated listing
} else { } else {
listing, err := generateDirectoryListing(URL, path, config)
if err != nil {
errorLog.Println("Error generating listing for directory " + path + ": " + err.Error())
conn.Write([]byte("40 Server error!\r\n"))
log.Status = 40
return
}
conn.Write([]byte("20 text/gemini\r\n")) conn.Write([]byte("20 text/gemini\r\n"))
log.Status = 20 log.Status = 20
conn.Write([]byte(generateDirectoryListing(URL, path, config))) conn.Write([]byte(listing))
} }
} }