main.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package main
  2. import (
  3. "github.com/abbot/go-http-auth"
  4. "github.com/kpmy/mipfs/ipfs_api"
  5. "github.com/kpmy/mipfs/wdfs"
  6. . "github.com/kpmy/ypk/tc"
  7. "github.com/peterbourgon/diskv"
  8. "github.com/tv42/zbase32"
  9. "log"
  10. "net/http"
  11. "os"
  12. )
  13. var KV *diskv.Diskv
  14. func init() {
  15. KV = diskv.New(diskv.Options{
  16. BasePath: ".diskv",
  17. Transform: func(s string) []string {
  18. return []string{}
  19. },
  20. })
  21. }
  22. func main() {
  23. dir, _ := os.Getwd()
  24. log.Println("started at", dir)
  25. if r, err := KV.Read("ipfs"); err == nil {
  26. ipfs_api.Addr = string(r)
  27. }
  28. log.Println("ipfs api at", ipfs_api.Addr)
  29. Assert(ipfs_api.Shell().Pin(wdfs.EmptyDirHash) == nil && ipfs_api.Shell().Pin(wdfs.EmptyFileHash) == nil, 40)
  30. dav := handler()
  31. http.Handle("/ipfs/", dav)
  32. http.Handle("/ipfs", dav)
  33. http.HandleFunc("/hash", auth.NewBasicAuthenticator("ipfs", func(user, realm string) (ret string) {
  34. un := zbase32.EncodeToString([]byte(user))
  35. if hash, err := KV.Read(un); err == nil {
  36. ret = string(hash)
  37. }
  38. return
  39. }).Wrap(func(resp http.ResponseWriter, req *auth.AuthenticatedRequest) {
  40. un := zbase32.EncodeToString([]byte(req.Username))
  41. if rh, err := KV.Read(un + ".root"); err == nil {
  42. rootHash := string(rh)
  43. tpl := "<html><body><a href='https://ipfs.io/ipfs/" + rootHash + "' target='_blank'>/ipfs/" + rootHash + "</a></body></html>"
  44. resp.Write([]byte(tpl))
  45. }
  46. }))
  47. const addr = "0.0.0.0:6001"
  48. log.Println("webdav server started at", addr)
  49. log.Println(http.ListenAndServe(addr, nil))
  50. }