mirror of
https://github.com/kopia/kopia.git
synced 2026-01-26 07:18:02 -05:00
56 lines
1.1 KiB
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
|
|
}
|