static.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package static
  2. import (
  3. "embed"
  4. "html/template"
  5. "io/fs"
  6. "log"
  7. "os"
  8. "path/filepath"
  9. "github.com/pkg/errors"
  10. )
  11. //go:embed web/*
  12. //go:embed web/_next/static
  13. //go:embed web/_next/static/chunks/pages/*.js
  14. //go:embed web/_next/static/*/*.js
  15. var webFiles embed.FS
  16. // GetWeb will return an embedded filesystem reference to the admin web app.
  17. func GetWeb() fs.FS {
  18. wf, err := fs.Sub(webFiles, "web")
  19. if err != nil {
  20. log.Fatal(err)
  21. }
  22. return wf
  23. }
  24. //go:embed img/emoji/*
  25. var emojiFiles embed.FS
  26. // GetEmoji will return the emoji files.
  27. func GetEmoji() fs.FS {
  28. ef, err := fs.Sub(emojiFiles, "img/emoji")
  29. if err != nil {
  30. log.Fatal(err)
  31. }
  32. return ef
  33. }
  34. // GetWebIndexTemplate will return the bot/scraper metadata template.
  35. func GetWebIndexTemplate() (*template.Template, error) {
  36. webFiles := GetWeb()
  37. name := "index.html"
  38. t, err := template.ParseFS(webFiles, name)
  39. if err != nil {
  40. return nil, errors.Wrap(err, "unable to open index.html template")
  41. }
  42. tmpl := template.Must(t, err)
  43. return tmpl, err
  44. }
  45. //go:embed offline.tsclip
  46. var offlineVideoSegment []byte
  47. // GetOfflineSegment will return the offline video segment data.
  48. func GetOfflineSegment() []byte {
  49. return getFileSystemStaticFileOrDefault("offline.tsclip", offlineVideoSegment)
  50. }
  51. //go:embed img/logo.png
  52. var logo []byte
  53. // GetLogo will return the logo data.
  54. func GetLogo() []byte {
  55. return getFileSystemStaticFileOrDefault("img/logo.png", logo)
  56. }
  57. func getFileSystemStaticFileOrDefault(path string, defaultData []byte) []byte {
  58. fullPath := filepath.Join("static", path)
  59. data, err := os.ReadFile(fullPath) //nolint: gosec
  60. if err != nil {
  61. return defaultData
  62. }
  63. return data
  64. }