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  }