1 |
yakumo_izuru |
1.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 |
|
|
// This function is called by the `aya serve` subcommand |
33 |
|
|
func HttpServe(Dir string, Port int) { |
34 |
|
|
handler := &Handler{http.FileServer(http.Dir(Dir))} |
35 |
|
|
http.Handle("/", handler) |
36 |
|
|
addr := fmt.Sprintf("127.0.0.1:%d", Port) |
37 |
|
|
log.Printf("[aya.HttpServe] Listening on %s\n", addr) |
38 |
|
|
log.Fatal(http.ListenAndServe(addr, nil)) |
39 |
|
|
} |