72
|
1 // Taken from https://github.com/fogleman/serve and repurposed as a library
|
|
2 package aya
|
|
3
|
|
4 import (
|
|
5 "fmt"
|
|
6 "log"
|
|
7 "net/http"
|
|
8 )
|
|
9
|
|
10 // ResponseWriter wraps http.ResponseWriter to capture the HTTP status code
|
|
11 type ResponseWriter struct {
|
|
12 http.ResponseWriter
|
|
13 StatusCode int
|
|
14 }
|
|
15
|
|
16 func (w *ResponseWriter) WriteHeader(statusCode int) {
|
|
17 w.StatusCode = statusCode
|
|
18 w.ResponseWriter.WriteHeader(statusCode)
|
|
19 }
|
|
20
|
|
21 // Handler wraps http.Handler to log served files
|
|
22 type Handler struct {
|
|
23 http.Handler
|
|
24 }
|
|
25
|
|
26 func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
27 rw := &ResponseWriter{w, 0}
|
|
28 h.Handler.ServeHTTP(rw, r)
|
|
29 log.Println(r.RemoteAddr, r.Method, rw.StatusCode, r.URL)
|
|
30 }
|
|
31
|
|
32 func HttpServe(Dir string) {
|
|
33 handler := &Handler{http.FileServer(http.Dir(Dir))}
|
|
34 http.Handle("/", handler)
|
|
35 addr := fmt.Sprintf(":%d", 8000)
|
|
36 log.Printf("Listening on %s\n", addr)
|
|
37 log.Fatal(http.ListenAndServe(addr, nil))
|
|
38 }
|