/[aya]/serve.go
ViewVC logotype

Annotation of /serve.go

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations)
Mon Sep 30 00:42:05 2024 UTC (6 weeks, 4 days ago) by yakumo_izuru
Branch: MAIN
CVS Tags: HEAD
Mirrored from https://git.chaotic.ninja/git/yakumo_izuru/aya

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     }

nishi@chaotic.ninja
ViewVC Help
Powered by ViewVC 1.3.0-dev