feat(api): landing page with Nubes design (logo+favicon), /static; v0.1.8
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
// landing_embed.go — встраивает лендинг-инструкцию и статику (лого, favicon).
|
||||
package api
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// landingHTML — лендинг "/" с инструкцией (дизайн shared-sqs).
|
||||
//
|
||||
//go:embed ui/landing.html
|
||||
var landingHTML []byte
|
||||
|
||||
// staticFS — логотип и favicon (дизайн Nubes, как на shared-sqs).
|
||||
//
|
||||
//go:embed ui/static
|
||||
var staticFS embed.FS
|
||||
|
||||
// versionPlaceholder — заменяется на версию при отдаче страницы.
|
||||
const versionPlaceholder = "{{VERSION}}"
|
||||
|
||||
// ServeLanding отдаёт лендинг "/" с подставленной версией.
|
||||
func ServeLanding(w http.ResponseWriter, r *http.Request, version string) {
|
||||
body := strings.ReplaceAll(string(landingHTML), versionPlaceholder, version)
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
w.Header().Set("Cache-Control", "no-cache, must-revalidate")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_, _ = w.Write([]byte(body))
|
||||
}
|
||||
|
||||
// StaticHandler раздаёт /static/* (logo.svg, favicon.svg) из embed.
|
||||
func StaticHandler() http.Handler {
|
||||
sub, err := fs.Sub(staticFS, "ui/static")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return http.FileServer(http.FS(sub))
|
||||
}
|
||||
Reference in New Issue
Block a user