fs: Use better error messages
This commit is contained in:
parent
2ece48b019
commit
a606c4fcc0
15
fs.go
15
fs.go
@ -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"
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user