From eeade60045735e2494715fb66db45a622851f735 Mon Sep 17 00:00:00 2001 From: Izuru Yakumo Date: Mon, 23 Oct 2023 19:39:52 -0300 Subject: [PATCH] =?utf8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E5=80=9F?= =?utf8?q?=E3=82=8A=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Izuru Yakumo --- cmd/aya/main.go | 13 ++----------- serve.go | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 serve.go diff --git a/cmd/aya/main.go b/cmd/aya/main.go index 9ade991..d05b1f5 100644 --- a/cmd/aya/main.go +++ b/cmd/aya/main.go @@ -1,4 +1,4 @@ -// $TheSupernovaDuo: marisa.chaotic.ninja/aya/cmd/aya, v 1.0 2023-10-03 02:34:17, yakumo_izuru Exp $ +// $TheSupernovaDuo: marisa.chaotic.ninja/aya/cmd/aya, v0.6.4 2023-10-23 22:26:23, yakumo_izuru Exp $ package main import ( @@ -6,7 +6,6 @@ import ( "fmt" "io" "log" - "net/http" "os" "os/exec" "path/filepath" @@ -369,14 +368,6 @@ func buildAll(watch bool) { } } -// Serve the public directory over HTTP -func serve() { - root := http.Dir(PUBDIR) - http.Handle("/", http.FileServer(root)) - log.Printf("Serving the %s directory over http://localhost:8000. Interrupt with ^C.\n", PUBDIR) - log.Fatal(http.ListenAndServe(":8000", nil)) -} - // Initialize the environment func init() { // prepend .aya to $PATH, so plugins will be found before OS commands @@ -422,7 +413,7 @@ func main() { case "help": printUsage() case "serve": - serve() + aya.HttpServe(PUBDIR) case "var": if len(args) == 0 { log.Fatal("var: filename expected") diff --git a/serve.go b/serve.go new file mode 100644 index 0000000..36f7bcb --- /dev/null +++ b/serve.go @@ -0,0 +1,38 @@ +// Taken from https://github.com/fogleman/serve and repurposed as a library +package aya + +import ( + "fmt" + "log" + "net/http" +) + +// ResponseWriter wraps http.ResponseWriter to capture the HTTP status code +type ResponseWriter struct { + http.ResponseWriter + StatusCode int +} + +func (w *ResponseWriter) WriteHeader(statusCode int) { + w.StatusCode = statusCode + w.ResponseWriter.WriteHeader(statusCode) +} + +// Handler wraps http.Handler to log served files +type Handler struct { + http.Handler +} + +func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + rw := &ResponseWriter{w, 0} + h.Handler.ServeHTTP(rw, r) + log.Println(r.RemoteAddr, r.Method, rw.StatusCode, r.URL) +} + +func HttpServe(Dir string) { + handler := &Handler{http.FileServer(http.Dir(Dir))} + http.Handle("/", handler) + addr := fmt.Sprintf(":%d", 8000) + log.Printf("Listening on %s\n", addr) + log.Fatal(http.ListenAndServe(addr, nil)) +} -- 2.43.0