1 // Taken from https://github.com/fogleman/serve and repurposed as a library
10 // ResponseWriter wraps http.ResponseWriter to capture the HTTP status code
11 type ResponseWriter
struct {
16 func (w
*ResponseWriter
) WriteHeader(statusCode
int) {
17 w
.StatusCode
= statusCode
18 w
.ResponseWriter
.WriteHeader(statusCode
)
21 // Handler wraps http.Handler to log served files
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
)
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))