static.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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-v2.ts
  46. var offlineVideoSegment []byte
  47. // GetOfflineSegment will return the offline video segment data.
  48. func GetOfflineSegment() []byte {
  49. return getFileSystemStaticFileOrDefault("offline-v2.ts", 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. }
  65. //go:embed metadata.html.tmpl
  66. var botMetadataTemplate embed.FS
  67. // GetBotMetadataTemplate will return the bot/scraper metadata template.
  68. func GetBotMetadataTemplate() (*template.Template, error) {
  69. name := "metadata.html.tmpl"
  70. t, err := template.ParseFS(botMetadataTemplate, name)
  71. tmpl := template.Must(t, err)
  72. return tmpl, err
  73. }