internal/web/assets.go
35 Zeilen · 811 B · Go
| 1 | package web |
| 2 | |
| 3 | import ( |
| 4 | "embed" |
| 5 | "io/fs" |
| 6 | "log" |
| 7 | "net/http" |
| 8 | "os/exec" |
| 9 | ) |
| 10 | |
| 11 | //go:embed assets |
| 12 | var assetsFS embed.FS |
| 13 | |
| 14 | // staticHandler liefert die eingebetteten CSS-/JS-Dateien aus. |
| 15 | func staticHandler() http.Handler { |
| 16 | sub, err := fs.Sub(assetsFS, "assets") |
| 17 | if err != nil { |
| 18 | log.Fatalf("web: eingebettete dateien: %v", err) |
| 19 | } |
| 20 | return http.FileServer(http.FS(sub)) |
| 21 | } |
| 22 | |
| 23 | // writeAsset schreibt eine eingebettete Datei direkt in die Antwort. |
| 24 | func writeAsset(w http.ResponseWriter, name string) { |
| 25 | data, err := assetsFS.ReadFile("assets/" + name) |
| 26 | if err != nil { |
| 27 | http.Error(w, "Datei fehlt: "+name, http.StatusInternalServerError) |
| 28 | return |
| 29 | } |
| 30 | if _, err := w.Write(data); err != nil { |
| 31 | log.Printf("web: %s ausliefern: %v", name, err) |
| 32 | } |
| 33 | } |
| 34 | |
| 35 | func lookPath(name string) (string, error) { return exec.LookPath(name) } |