main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "git.swzry.com/zry/GoHiedaLogger/hieda_ginutil"
  6. "git.swzry.com/zry/GoHiedaLogger/hiedabke_console"
  7. "git.swzry.com/zry/GoHiedaLogger/hiedalog"
  8. "git.swzry.com/zry/afero2webdav/afero2webdav"
  9. ngvfs "git.swzry.com/zry/openNGVFS/openngvfs"
  10. "git.swzry.com/zry/pathutils"
  11. "github.com/gin-gonic/gin"
  12. "golang.org/x/net/webdav"
  13. "net/http"
  14. "os"
  15. "strings"
  16. "time"
  17. )
  18. func main() {
  19. root, err := pathutils.GetCurrentDirectory()
  20. if err != nil {
  21. panic(fmt.Errorf("failed to get executable directory: %v", err))
  22. }
  23. logger := hiedalog.NewHiedaLogger()
  24. consoleBke := hiedabke_console.NewConsoleBackend(os.Stderr)
  25. logger.AddBackend(consoleBke, logger.LevelFilter.NameToID(hiedalog.DLN_DEBUG))
  26. fs := ngvfs.NewOpenNagaeVFS(logger)
  27. ctx := context.Background()
  28. defer func() {
  29. err = fs.DeInit()
  30. if err != nil {
  31. fmt.Println("error deinitializing fs: ", err)
  32. }
  33. }()
  34. err = fs.Init(ctx, root, "test")
  35. if err != nil {
  36. fmt.Println("error initializing fs: ", err)
  37. return
  38. }
  39. err = fs.RunMount()
  40. if err != nil {
  41. fmt.Println("error in run auto-mount: ", err)
  42. return
  43. }
  44. wfs := afero2webdav.NewAfero2Webdav(fs)
  45. hdl := &webdav.Handler{
  46. Prefix: "/",
  47. FileSystem: wfs,
  48. LockSystem: webdav.NewMemLS(),
  49. Logger: func(request *http.Request, err error) {
  50. if err != nil {
  51. logger.LogComplex("webdav", hiedalog.DLN_WARN, map[string]string{
  52. "type": "webdav-error",
  53. "msg": err.Error(),
  54. })
  55. }
  56. },
  57. }
  58. websvr := gin.Default()
  59. websvr.Use(hieda_ginutil.GinLoggerWithComplexLogger(hieda_ginutil.GinLoggerConfig{
  60. Logger: logger,
  61. ModuleName: "web",
  62. LevelMapFunc: hieda_ginutil.GetDefaultLevelMapFunc(),
  63. }))
  64. websvr.Use(func(c *gin.Context) {
  65. if strings.HasPrefix(c.Request.URL.Path, hdl.Prefix) {
  66. c.Status(200)
  67. hdl.ServeHTTP(c.Writer, c.Request)
  68. c.Abort()
  69. }
  70. })
  71. err = websvr.Run(":5821")
  72. if err != nil {
  73. fmt.Println("error in http server: ", err)
  74. return
  75. }
  76. logger.LogString("main", hiedalog.DLN_INFO, "delay 100ms...")
  77. time.Sleep(time.Millisecond * 100)
  78. logger.LogString("main", hiedalog.DLN_INFO, "Done.")
  79. }