From: Izuru Yakumo Date: Mon, 23 Oct 2023 22:39:52 +0000 (-0300) Subject: コードを借りる X-Git-Tag: 0.6.4 X-Git-Url: http://10.10.0.4:5575/?a=commitdiff_plain;h=eeade60045735e2494715fb66db45a622851f735;p=aya.git コードを借りる Signed-off-by: Izuru Yakumo --- 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)) +}