aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYotam Nachum <me@yotam.net>2019-12-06 21:04:46 +0200
committerYotam Nachum <me@yotam.net>2019-12-06 21:22:18 +0200
commitb612902e77a7f05231343ac26769e461e3114027 (patch)
tree2a30c12d67d413655e78052898c93b77c0117ad5
parentReturn the correct mime in response header (diff)
downloadshavit-b612902e77a7f05231343ac26769e461e3114027.tar.gz
shavit-b612902e77a7f05231343ac26769e461e3114027.zip
Refactor main handler
-rw-r--r--handler.go40
1 files changed, 22 insertions, 18 deletions
diff --git a/handler.go b/handler.go
index e484b27..addc538 100644
--- a/handler.go
+++ b/handler.go
@@ -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)
}