Mercurial > yakumo_izuru > aya
diff serve.go @ 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 | |
children | e1f9fda6986a |
line wrap: on
line diff
--- /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)) +}