fs: Use better error messages

This commit is contained in:
Adnan Maolood 2021-02-21 09:56:59 -05:00
parent 2ece48b019
commit a606c4fcc0

15
fs.go
View File

@ -2,6 +2,7 @@ package gemini
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"io" "io"
"io/fs" "io/fs"
@ -118,14 +119,14 @@ func serveFile(w ResponseWriter, r *Request, fsys fs.FS, name string, redirect b
f, err := fsys.Open(name) f, err := fsys.Open(name)
if err != nil { if err != nil {
w.WriteHeader(StatusNotFound, "Not found") w.WriteHeader(toGeminiError(err))
return return
} }
defer f.Close() defer f.Close()
stat, err := f.Stat() stat, err := f.Stat()
if err != nil { if err != nil {
w.WriteHeader(StatusTemporaryFailure, "Temporary failure") w.WriteHeader(toGeminiError(err))
return return
} }
@ -204,3 +205,13 @@ func dirList(w ResponseWriter, f fs.File) {
fmt.Fprintln(w, link.String()) fmt.Fprintln(w, link.String())
} }
} }
func toGeminiError(err error) (status Status, meta string) {
if errors.Is(err, fs.ErrNotExist) {
return StatusNotFound, "Not found"
}
if errors.Is(err, fs.ErrPermission) {
return StatusNotFound, "Forbidden"
}
return StatusTemporaryFailure, "Internal server error"
}