main.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package main
  2. import (
  3. "embed"
  4. "flag"
  5. "fmt"
  6. "net/http"
  7. "os"
  8. "os/signal"
  9. "syscall"
  10. "imuslab.com/bokofs/bokofsd/mod/bokofs"
  11. "imuslab.com/bokofs/bokofsd/mod/bokofs/bokoworker"
  12. )
  13. //go:embed web/*
  14. var embeddedFiles embed.FS
  15. func main() {
  16. flag.Parse()
  17. // Start the application
  18. err := initialization()
  19. if err != nil {
  20. panic(err)
  21. }
  22. // Capture termination signals and call cleanup
  23. signalChan := make(chan os.Signal, 1)
  24. signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)
  25. go func() {
  26. <-signalChan
  27. fmt.Println("Received termination signal, cleaning up...")
  28. cleanup()
  29. os.Exit(0)
  30. }()
  31. //DEBUG
  32. wds, err := bokofs.NewWebdavInterfaceServer("/disk/", "/thumb/")
  33. if err != nil {
  34. panic(err)
  35. }
  36. test, err := bokoworker.NewFSWorker(&bokoworker.Options{
  37. NodeName: "test",
  38. ServePath: "./test",
  39. ThumbnailStore: "./tmp/test/",
  40. })
  41. if err != nil {
  42. panic(err)
  43. }
  44. wds.AddWorker(test)
  45. test2, err := bokoworker.NewFSWorker(&bokoworker.Options{
  46. NodeName: "test2",
  47. ServePath: "./mod",
  48. ThumbnailStore: "./tmp/mod/",
  49. })
  50. if err != nil {
  51. panic(err)
  52. }
  53. wds.AddWorker(test2)
  54. //END DEBUG
  55. /* Static Web Server */
  56. http.Handle("/", csrfMiddleware(http.FileServer(webfs)))
  57. /* WebDAV Handlers */
  58. http.Handle("/disk/", wds.FsHandler()) //Note the trailing slash
  59. http.Handle("/thumb/", wds.ThumbHandler()) //Note the trailing slash
  60. /* REST API Handlers */
  61. http.Handle("/meta", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  62. // TODO: Implement handler logic for /meta
  63. fmt.Fprintln(w, "Meta handler not implemented yet")
  64. }))
  65. http.Handle("/api/", csrfMiddleware(HandlerAPIcalls()))
  66. addr := fmt.Sprintf(":%d", *httpPort)
  67. fmt.Printf("Starting static web server on %s\n", addr)
  68. if err := http.ListenAndServe(addr, nil); err != nil {
  69. fmt.Fprintf(os.Stderr, "Error starting server: %v\n", err)
  70. os.Exit(1)
  71. }
  72. }