github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/controller/clib/static.go (about) 1 // Package clib - Content managed by Project Forge, see [projectforge.md] for details. 2 package clib 3 4 import ( 5 "net/http" 6 "strings" 7 8 "github.com/kyleu/dbaudit/app/controller/cutil" 9 "github.com/kyleu/dbaudit/assets" 10 ) 11 12 func Favicon(w http.ResponseWriter, r *http.Request) { 13 e, err := assets.Embed("favicon.ico") 14 assetResponse(w, r, e, err) 15 } 16 17 func RobotsTxt(w http.ResponseWriter, r *http.Request) { 18 e, err := assets.Embed("robots.txt") 19 assetResponse(w, r, e, err) 20 } 21 22 func Static(w http.ResponseWriter, r *http.Request) { 23 p := strings.TrimPrefix(r.URL.Path, "/assets") 24 p = strings.TrimPrefix(p, "/") 25 if strings.Contains(p, "../") { 26 w.WriteHeader(http.StatusNotFound) 27 _, _ = w.Write([]byte("invalid path")) 28 } else { 29 e, err := assets.Embed(p) 30 assetResponse(w, r, e, err) 31 } 32 } 33 34 func assetResponse(w http.ResponseWriter, r *http.Request, e *assets.Entry, err error) { 35 if err == nil { 36 w.Header().Set(cutil.HeaderContentType, e.Mime) 37 w.Header().Set(cutil.HeaderCacheControl, "public, max-age=3600") 38 w.WriteHeader(http.StatusOK) 39 cutil.WriteCORS(w) 40 _, _ = w.Write(e.Bytes) 41 } else { 42 w.WriteHeader(http.StatusNotFound) 43 _, _ = w.Write([]byte(err.Error())) 44 } 45 }