main.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "git.swzry.com/zry/afero2webdav/afero2webdav"
  6. "github.com/gin-gonic/gin"
  7. "github.com/spf13/afero"
  8. "golang.org/x/net/webdav"
  9. "net/http"
  10. "strings"
  11. )
  12. var flagHelp bool
  13. var flagServPath string
  14. var flagBindAddr string
  15. func main() {
  16. flag.BoolVar(&flagHelp, "h", false, "print help")
  17. flag.StringVar(&flagServPath, "p", ".", "path to serve")
  18. flag.StringVar(&flagBindAddr, "b", ":8821", "bind address")
  19. flag.Parse()
  20. if flagHelp {
  21. flag.PrintDefaults()
  22. return
  23. }
  24. basefs := afero.NewOsFs()
  25. bpfs := afero.NewBasePathFs(basefs, flagServPath)
  26. wfs := afero2webdav.NewAfero2Webdav(bpfs)
  27. hdl := &webdav.Handler{
  28. Prefix: "/",
  29. FileSystem: wfs,
  30. LockSystem: webdav.NewMemLS(),
  31. Logger: func(request *http.Request, err error) {
  32. if err != nil {
  33. fmt.Println("[webdav-error] error: ", err)
  34. }
  35. },
  36. }
  37. websvr := gin.Default()
  38. websvr.Use(gin.Logger())
  39. websvr.Use(func(c *gin.Context) {
  40. if strings.HasPrefix(c.Request.URL.Path, hdl.Prefix) {
  41. c.Status(200)
  42. hdl.ServeHTTP(c.Writer, c.Request)
  43. c.Abort()
  44. }
  45. })
  46. err := websvr.Run(flagBindAddr)
  47. if err != nil {
  48. fmt.Println("error in http server: ", err)
  49. return
  50. }
  51. }