diff options
author | Yotam Nachum <me@yotam.net> | 2019-12-06 21:04:46 +0200 |
---|---|---|
committer | Yotam Nachum <me@yotam.net> | 2019-12-06 21:22:18 +0200 |
commit | b612902e77a7f05231343ac26769e461e3114027 (patch) | |
tree | 2a30c12d67d413655e78052898c93b77c0117ad5 | |
parent | Return the correct mime in response header (diff) | |
download | shavit-b612902e77a7f05231343ac26769e461e3114027.tar.gz shavit-b612902e77a7f05231343ac26769e461e3114027.zip |
Refactor main handler
-rw-r--r-- | handler.go | 40 |
1 files changed, 22 insertions, 18 deletions
@@ -17,6 +17,15 @@ func absPathMime(path string) string { return mime.TypeByExtension(ext) } +func isFile(path string) bool { + fileInfo, err := os.Stat(path) + if err != nil { + return false + } + + return fileInfo.Mode().IsRegular() +} + // Handler is the main handler of the server type Handler struct { cfg Config @@ -40,47 +49,42 @@ func (h Handler) urlAbsPath(rawURL string) (string, error) { return itemPath, nil } -func (h Handler) isFile(path string) bool { - fileInfo, err := os.Stat(path) - if err != nil { - return false - } - - return fileInfo.Mode().IsRegular() -} - func (h Handler) getFilePath(rawURL string) (string, error) { itemPath, err := h.urlAbsPath(rawURL) if err != nil { return "", err } - if h.isFile(itemPath) { + if isFile(itemPath) { return itemPath, nil } indexPath := filepath.Join(itemPath, "index.gmi") - if h.isFile(indexPath) { + if isFile(indexPath) { return indexPath, nil } return "", gemini.Error{Err: fmt.Errorf("file not found"), Status: gemini.StatusNotFound} } -// Handle implement the gemini.Handler interface by serving files from a given source directory -func (h Handler) Handle(r gemini.Request) gemini.Response { - itemPath, err := h.getFilePath(r.URL) +func (h Handler) serveFile(path string) gemini.Response { + log.Println("Serving file from", path) + + file, err := os.Open(path) if err != nil { return gemini.ErrorResponse(err) } - log.Println("Serving file from", itemPath) + meta := absPathMime(path) + return gemini.Response{Status: gemini.StatusSuccess, Meta: meta, Body: file} +} - file, err := os.Open(itemPath) +// Handle implement the gemini.Handler interface by serving files from a given source directory +func (h Handler) Handle(r gemini.Request) gemini.Response { + path, err := h.getFilePath(r.URL) if err != nil { return gemini.ErrorResponse(err) } - meta := absPathMime(itemPath) - return gemini.Response{Status: gemini.StatusSuccess, Meta: meta, Body: file} + return h.serveFile(path) } |