diff --git a/fileserver/fileserver.go b/fileserver/fileserver.go index 2ee9214..d5a6208 100644 --- a/fileserver/fileserver.go +++ b/fileserver/fileserver.go @@ -3,7 +3,6 @@ package fileserver import ( "errors" "fmt" - "io" "io/ioutil" "mime" "os" @@ -18,34 +17,34 @@ var ( ErrUnsupportedFileType = errors.New("disabled/unsupported file type") ) -func Serve(root string, autoindex bool) func(w io.Writer, r *gemini.Request) { - return func(w io.Writer, r *gemini.Request) { +func Serve(root string, autoindex bool) func(w gemini.ResponseWriter, r *gemini.Request) { + return func(w gemini.ResponseWriter, r *gemini.Request) { fullpath, err := fullPath(root, r.URL.Path) if err != nil { if errors.Is(err, ErrDirWithoutIndexFile) && autoindex { body, mimeType, err := listDirectory(fullpath, r.URL.Path) if err != nil { - gemini.WriteHeader(w, gemini.StatusNotFound, err.Error()) + w.WriteHeader(gemini.StatusNotFound, err.Error()) return } - gemini.WriteHeader(w, gemini.StatusSuccess, mimeType) - gemini.Write(w, body) + w.WriteHeader(gemini.StatusSuccess, mimeType) + w.Write(body) return } - gemini.WriteHeader(w, gemini.StatusNotFound, err.Error()) + w.WriteHeader(gemini.StatusNotFound, err.Error()) return } body, mimeType, err := readFile(fullpath) if err != nil { - gemini.WriteHeader(w, gemini.StatusNotFound, err.Error()) + w.WriteHeader(gemini.StatusNotFound, err.Error()) return } - gemini.WriteHeader(w, gemini.StatusSuccess, mimeType) - gemini.Write(w, body) + w.WriteHeader(gemini.StatusSuccess, mimeType) + w.Write(body) } } diff --git a/middleware/logger.go b/middleware/logger.go index fc32f46..92a4e08 100644 --- a/middleware/logger.go +++ b/middleware/logger.go @@ -2,7 +2,6 @@ package middleware import ( "fmt" - "io" "log" "os" "strings" @@ -11,20 +10,23 @@ import ( "github.com/n0x1m/gmifs/gemini" ) -func Logger(log *log.Logger) func(next gemini.Handler) gemini.Handler { +func Logger(log *log.Logger) func(gemini.Handler) gemini.Handler { return func(next gemini.Handler) gemini.Handler { - fn := func(w io.Writer, r *gemini.Request) { + fn := func(w gemini.ResponseWriter, r *gemini.Request) { t := time.Now() - next.ServeGemini(w, r) + ri := gemini.NewInterceptor(w) + next.ServeGemini(ri, r) + ri.Flush() ip := strings.Split(r.RemoteAddr, ":")[0] hostname, _ := os.Hostname() - fmt.Fprintf(log.Writer(), "%s %s - - [%s] \"%s\" - %v\n", + fmt.Fprintf(log.Writer(), "%s %s - - [%s] \"%s\" %d - %v\n", hostname, ip, t.Format("02/Jan/2006:15:04:05 -0700"), r.URL.Path, + ri.Code, time.Since(t), ) }