mirror of
https://github.com/fankes/beszel.git
synced 2025-10-18 09:19:27 +08:00
53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
//go:build !development
|
|
|
|
package hub
|
|
|
|
import (
|
|
"io/fs"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
|
|
"github.com/henrygd/beszel"
|
|
"github.com/henrygd/beszel/internal/site"
|
|
|
|
"github.com/pocketbase/pocketbase/apis"
|
|
"github.com/pocketbase/pocketbase/core"
|
|
)
|
|
|
|
// startServer sets up the production server for Beszel
|
|
func (h *Hub) startServer(se *core.ServeEvent) error {
|
|
// parse app url
|
|
parsedURL, err := url.Parse(h.appURL)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// fix base paths in html if using subpath
|
|
basePath := strings.TrimSuffix(parsedURL.Path, "/") + "/"
|
|
indexFile, _ := fs.ReadFile(site.DistDirFS, "index.html")
|
|
html := strings.ReplaceAll(string(indexFile), "./", basePath)
|
|
html = strings.Replace(html, "{{V}}", beszel.Version, 1)
|
|
html = strings.Replace(html, "{{HUB_URL}}", h.appURL, 1)
|
|
// set up static asset serving
|
|
staticPaths := [2]string{"/static/", "/assets/"}
|
|
serveStatic := apis.Static(site.DistDirFS, false)
|
|
// get CSP configuration
|
|
csp, cspExists := GetEnv("CSP")
|
|
// add route
|
|
se.Router.GET("/{path...}", func(e *core.RequestEvent) error {
|
|
// serve static assets if path is in staticPaths
|
|
for i := range staticPaths {
|
|
if strings.Contains(e.Request.URL.Path, staticPaths[i]) {
|
|
e.Response.Header().Set("Cache-Control", "public, max-age=2592000")
|
|
return serveStatic(e)
|
|
}
|
|
}
|
|
if cspExists {
|
|
e.Response.Header().Del("X-Frame-Options")
|
|
e.Response.Header().Set("Content-Security-Policy", csp)
|
|
}
|
|
return e.HTML(http.StatusOK, html)
|
|
})
|
|
return nil
|
|
}
|