Mercurial > yakumo_izuru > aya
changeset 72:b32ca33188c0 draft
コードを借りる
Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author | yakumo.izuru |
---|---|
date | Mon, 23 Oct 2023 22:39:52 +0000 |
parents | 7819959ac6ca |
children | 8533d875a2bb |
files | cmd/aya/main.go serve.go |
diffstat | 2 files changed, 40 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/cmd/aya/main.go Tue Oct 03 02:39:08 2023 +0000 +++ b/cmd/aya/main.go Mon Oct 23 22:39:52 2023 +0000 @@ -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 @@ "fmt" "io" "log" - "net/http" "os" "os/exec" "path/filepath" @@ -369,14 +368,6 @@ } } -// 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 @@ case "help": printUsage() case "serve": - serve() + aya.HttpServe(PUBDIR) case "var": if len(args) == 0 { log.Fatal("var: filename expected")
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serve.go Mon Oct 23 22:39:52 2023 +0000 @@ -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)) +}