package main import ( "golang.org/x/net/webdav" "log" "net/http" "path/filepath" flag "github.com/spf13/pflag" ) func logger(req *http.Request, err error) { if err != nil { log.Printf("[%s] %s %s, err=%s", req.RemoteAddr, req.Method, req.RequestURI, err) } else { log.Printf("[%s] %s %s", req.RemoteAddr, req.Method, req.RequestURI) } } func main() { var ( bind string rootDir string verbose bool ) flag.StringVarP(&bind, "bind", "b", "localhost:8080", "Address to listen to.") flag.StringVarP(&rootDir, "root", "r", ".", "Root directory") flag.BoolVarP(&verbose, "verbose", "v", false, "Verbose") flag.Parse() handler := &webdav.Handler{ FileSystem: webdav.Dir(rootDir), LockSystem: webdav.NewMemLS(), } if verbose { handler.Logger = logger } root, err := filepath.Abs(rootDir) if err != nil { log.Fatalf("Error: invalid root directory '%s': %s", rootDir, err) } log.Printf("Starting WebDAV server at '%s' on '%s'...", root, bind) if err = http.ListenAndServe(bind, handler); err != nil { log.Fatalf("Error: server listen and serve failed: %s", err) } }