Files
kopia/cli/command_mount_webdav.go

56 lines
1.1 KiB
Go

package cli
import (
"context"
"fmt"
"log"
"net/http"
"os"
"golang.org/x/net/webdav"
"github.com/kopia/kopia/fs"
"github.com/kopia/kopia/internal/webdavmount"
)
func mountDirectoryWebDAV(entry fs.Directory, mountPoint string) error {
mux := http.NewServeMux()
mux.Handle("/", &webdav.Handler{
FileSystem: webdavmount.WebDAVFS(entry),
LockSystem: webdav.NewMemLS(),
Logger: func(r *http.Request, err error) {
var maybeRange string
if r := r.Header.Get("Range"); r != "" {
maybeRange = " " + r
}
if err != nil {
log.Printf("%v %v%v err: %v", r.Method, r.URL.RequestURI(), maybeRange, err)
} else {
log.Printf("%v %v%v OK", r.Method, r.URL.RequestURI(), maybeRange)
}
},
})
s := http.Server{
Addr: "127.0.0.1:9998",
Handler: mux,
}
onCtrlC(func() {
s.Shutdown(context.Background())
})
fmt.Fprintf(os.Stderr, "Server listening at http://%v/ Press Ctrl-C to shut down.\n", s.Addr)
err := s.ListenAndServe()
if err == http.ErrServerClosed {
fmt.Println("Server shut down.")
}
if err != http.ErrServerClosed {
return err
}
return nil
}