main.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package main
  2. import (
  3. "embed"
  4. "flag"
  5. "fmt"
  6. "io/fs"
  7. "net/http"
  8. "os"
  9. "imuslab.com/bokofs/bokofsd/mod/bokofs"
  10. "imuslab.com/bokofs/bokofsd/mod/bokofs/bokoworker"
  11. )
  12. //go:embed web/*
  13. var embeddedFiles embed.FS
  14. func main() {
  15. flag.Parse()
  16. var fileSystem http.FileSystem
  17. if *devMode {
  18. fmt.Println("Development mode enabled. Serving files from ./web directory.")
  19. fileSystem = http.Dir("./web")
  20. } else {
  21. fmt.Println("Production mode enabled. Serving files from embedded filesystem.")
  22. subFS, err := fs.Sub(embeddedFiles, "web")
  23. if err != nil {
  24. fmt.Fprintf(os.Stderr, "Error accessing embedded subdirectory: %v\n", err)
  25. os.Exit(1)
  26. }
  27. fileSystem = http.FS(subFS)
  28. }
  29. configFolderPath := "./config"
  30. if *config != "" {
  31. configFolderPath = *config
  32. }
  33. if _, err := os.Stat(configFolderPath); os.IsNotExist(err) {
  34. fmt.Printf("Config folder does not exist. Creating folder at %s\n", configFolderPath)
  35. if err := os.Mkdir(configFolderPath, os.ModePerm); err != nil {
  36. fmt.Fprintf(os.Stderr, "Error creating config folder: %v\n", err)
  37. os.Exit(1)
  38. }
  39. }
  40. //DEBUG
  41. wds, err := bokofs.NewWebdavInterfaceServer("/disk/", "/thumb/")
  42. if err != nil {
  43. panic(err)
  44. }
  45. test, err := bokoworker.NewFSWorker(&bokoworker.Options{
  46. NodeName: "test",
  47. ServePath: "./test",
  48. ThumbnailStore: "./tmp/test/",
  49. })
  50. if err != nil {
  51. panic(err)
  52. }
  53. wds.AddWorker(test)
  54. test2, err := bokoworker.NewFSWorker(&bokoworker.Options{
  55. NodeName: "test2",
  56. ServePath: "./mod",
  57. ThumbnailStore: "./tmp/mod/",
  58. })
  59. if err != nil {
  60. panic(err)
  61. }
  62. wds.AddWorker(test2)
  63. //END DEBUG
  64. http.Handle("/", http.FileServer(fileSystem))
  65. /* WebDAV Handlers */
  66. http.Handle("/disk/", wds.FsHandler()) //Note the trailing slash
  67. http.Handle("/thumb/", wds.ThumbHandler()) //Note the trailing slash
  68. /* REST API Handlers */
  69. http.Handle("/meta", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  70. // TODO: Implement handler logic for /meta
  71. fmt.Fprintln(w, "Meta handler not implemented yet")
  72. }))
  73. addr := fmt.Sprintf(":%d", *httpPort)
  74. fmt.Printf("Starting static web server on %s\n", addr)
  75. if err := http.ListenAndServe(addr, nil); err != nil {
  76. fmt.Fprintf(os.Stderr, "Error starting server: %v\n", err)
  77. os.Exit(1)
  78. }
  79. }