annotate serve.go @ 79:7b122b71fcfa draft

A good time to finally release a stable version Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Tue, 12 Dec 2023 14:09:17 +0000
parents e1f9fda6986a
children d8c30f64e301
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
72
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
1 // Taken from https://github.com/fogleman/serve and repurposed as a library
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
2 package aya
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
3
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
4 import (
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
5 "fmt"
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
6 "log"
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
7 "net/http"
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
8 )
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
9
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
10 // ResponseWriter wraps http.ResponseWriter to capture the HTTP status code
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
11 type ResponseWriter struct {
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
12 http.ResponseWriter
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
13 StatusCode int
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
14 }
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
15
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
16 func (w *ResponseWriter) WriteHeader(statusCode int) {
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
17 w.StatusCode = statusCode
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
18 w.ResponseWriter.WriteHeader(statusCode)
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
19 }
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
20
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
21 // Handler wraps http.Handler to log served files
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
22 type Handler struct {
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
23 http.Handler
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
24 }
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
25
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
26 func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
27 rw := &ResponseWriter{w, 0}
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
28 h.Handler.ServeHTTP(rw, r)
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
29 log.Println(r.RemoteAddr, r.Method, rw.StatusCode, r.URL)
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
30 }
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
31
77
e1f9fda6986a Just a documentation update
yakumo.izuru
parents: 72
diff changeset
32 // This function is called by the `aya serve` subcommand
e1f9fda6986a Just a documentation update
yakumo.izuru
parents: 72
diff changeset
33 func HttpServe(Dir string, Port int) {
72
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
34 handler := &Handler{http.FileServer(http.Dir(Dir))}
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
35 http.Handle("/", handler)
77
e1f9fda6986a Just a documentation update
yakumo.izuru
parents: 72
diff changeset
36 addr := fmt.Sprintf(":%d", Port)
72
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
37 log.Printf("Listening on %s\n", addr)
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
38 log.Fatal(http.ListenAndServe(addr, nil))
b32ca33188c0 コードを借りる
yakumo.izuru
parents:
diff changeset
39 }