|
@@ -5,10 +5,13 @@ import (
|
|
"net/http"
|
|
"net/http"
|
|
"net/url"
|
|
"net/url"
|
|
|
|
|
|
|
|
+ "fmt"
|
|
"github.com/kpmy/mipfs/ipfs_api"
|
|
"github.com/kpmy/mipfs/ipfs_api"
|
|
"github.com/kpmy/mipfs/wdfs"
|
|
"github.com/kpmy/mipfs/wdfs"
|
|
|
|
+ "github.com/kpmy/ypk/fn"
|
|
"github.com/peterbourgon/diskv"
|
|
"github.com/peterbourgon/diskv"
|
|
"golang.org/x/net/webdav"
|
|
"golang.org/x/net/webdav"
|
|
|
|
+ "os"
|
|
)
|
|
)
|
|
|
|
|
|
var KV *diskv.Diskv
|
|
var KV *diskv.Diskv
|
|
@@ -25,36 +28,48 @@ func init() {
|
|
}
|
|
}
|
|
|
|
|
|
func main() {
|
|
func main() {
|
|
|
|
+ log.Println(os.Getwd())
|
|
root := "QmbuSdtGUUfL7DSvvA9DmiGSRqAzkHEjWtsxZDRPBWcawg"
|
|
root := "QmbuSdtGUUfL7DSvvA9DmiGSRqAzkHEjWtsxZDRPBWcawg"
|
|
if r, err := KV.Read("root"); err == nil {
|
|
if r, err := KV.Read("root"); err == nil {
|
|
root = string(r)
|
|
root = string(r)
|
|
} else {
|
|
} else {
|
|
KV.Write("root", []byte(root))
|
|
KV.Write("root", []byte(root))
|
|
}
|
|
}
|
|
- nodeID, _ := ipfs_api.Shell().ID()
|
|
|
|
- fs := wdfs.NewFS(nodeID, root)
|
|
|
|
- ls := wdfs.NewLS(fs)
|
|
|
|
- h := &webdav.Handler{
|
|
|
|
- Prefix: "/ipfs",
|
|
|
|
- FileSystem: fs,
|
|
|
|
- LockSystem: ls,
|
|
|
|
- Logger: func(r *http.Request, err error) {
|
|
|
|
- switch r.Method {
|
|
|
|
- case "COPY", "MOVE":
|
|
|
|
- dst := ""
|
|
|
|
- if u, err := url.Parse(r.Header.Get("Destination")); err == nil {
|
|
|
|
- dst = u.Path
|
|
|
|
|
|
+ if r, err := KV.Read("ipfs"); err == nil {
|
|
|
|
+ ipfs_api.Addr = string(r)
|
|
|
|
+ }
|
|
|
|
+ var fs webdav.FileSystem
|
|
|
|
+ var ls webdav.LockSystem
|
|
|
|
+ if nodeID, err := ipfs_api.Shell().ID(); err == nil {
|
|
|
|
+ fs = wdfs.NewFS(nodeID, root)
|
|
|
|
+ ls = wdfs.NewLS(fs)
|
|
|
|
+ } else {
|
|
|
|
+ log.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ if !fn.IsNil(fs) {
|
|
|
|
+ h := &webdav.Handler{
|
|
|
|
+ Prefix: "/ipfs",
|
|
|
|
+ FileSystem: fs,
|
|
|
|
+ LockSystem: ls,
|
|
|
|
+ Logger: func(r *http.Request, err error) {
|
|
|
|
+ switch r.Method {
|
|
|
|
+ case "COPY", "MOVE":
|
|
|
|
+ dst := ""
|
|
|
|
+ if u, err := url.Parse(r.Header.Get("Destination")); err == nil {
|
|
|
|
+ dst = u.Path
|
|
|
|
+ }
|
|
|
|
+ o := r.Header.Get("Overwrite")
|
|
|
|
+ log.Println(r.Method, r.URL.Path, dst, o, err)
|
|
|
|
+ default:
|
|
|
|
+ log.Println(r.Method, r.URL.Path, err)
|
|
}
|
|
}
|
|
- o := r.Header.Get("Overwrite")
|
|
|
|
- log.Println(r.Method, r.URL.Path, dst, o, err)
|
|
|
|
- default:
|
|
|
|
- log.Println(r.Method, r.URL.Path, err)
|
|
|
|
- }
|
|
|
|
- KV.Write("root", []byte(fs.String()))
|
|
|
|
- },
|
|
|
|
|
|
+ KV.Write("root", []byte(fmt.Sprint(fs)))
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+ http.Handle("/ipfs/", h)
|
|
|
|
+ http.Handle("/ipfs", h)
|
|
}
|
|
}
|
|
- http.Handle("/ipfs/", h)
|
|
|
|
- http.HandleFunc("/ipfs", func(resp http.ResponseWriter, req *http.Request) {
|
|
|
|
|
|
+ http.HandleFunc("/hash", func(resp http.ResponseWriter, req *http.Request) {
|
|
if r, err := KV.Read("root"); err == nil {
|
|
if r, err := KV.Read("root"); err == nil {
|
|
resp.Write(r)
|
|
resp.Write(r)
|
|
}
|
|
}
|