package lk // assets.go — шрифты кабинета внутри программы. // // Кабинет показывает персональные данные клиентов, поэтому страница не должна тянуть // ничего со сторонних сайтов: иначе адреса клиентов и заголовок Referer уходят третьей // стороне, строгие правила безопасности (CSP) становятся невозможны, а в закрытом // сегменте страница ещё и ждёт недоступную сеть. Шрифты вшиты в файл программы. import ( "embed" "net/http" "strings" "time" ) //go:embed assets var assetsFS embed.FS // assetsHandler — отдаёт /assets/*: только вшитые файлы, ничего с диска. func assetsHandler() http.Handler { start := time.Now() return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { name := strings.TrimPrefix(r.URL.Path, "/") data, err := assetsFS.ReadFile(name) if err != nil { http.NotFound(w, r) return } switch { case strings.HasSuffix(name, ".css"): w.Header().Set("Content-Type", "text/css; charset=utf-8") case strings.HasSuffix(name, ".woff2"): w.Header().Set("Content-Type", "font/woff2") } w.Header().Set("Cache-Control", "public, max-age=604800, immutable") http.ServeContent(w, r, name, start, strings.NewReader(string(data))) }) }