docker/homeassistant: Update frontend handler to serve static files from embedded FS

This commit is contained in:
Mo Tarbin 2024-07-24 00:41:08 -04:00
parent 0b60d7ee07
commit 62246fc5f7
1 changed files with 48 additions and 0 deletions

48
frontend/handler.go Normal file
View File

@ -0,0 +1,48 @@
package frontend
import (
"embed"
"io/fs"
"net/http"
"github.com/gin-gonic/gin"
)
//go:embed dist
var embeddedFiles embed.FS
type Handler struct {
}
func NewHandler() *Handler {
return &Handler{}
}
func Routes(router *gin.Engine, h *Handler) {
router.Use(staticMiddleware("dist"))
router.Static("/assets", "dist/assets")
// Gzip compression middleware
router.Group("/assets").Use(func(c *gin.Context) {
c.Header("Cache-Control", "max-age=31536000, immutable")
c.Next()
})
}
func staticMiddleware(root string) gin.HandlerFunc {
fileServer := http.FileServer(getFileSystem(root))
return func(c *gin.Context) {
fileServer.ServeHTTP(c.Writer, c.Request)
}
}
func getFileSystem(path string) http.FileSystem {
fs, err := fs.Sub(embeddedFiles, path)
if err != nil {
panic(err)
}
return http.FS(fs)
}