Files
filestash/server/ctrl/webdav.go
2018-10-25 20:25:59 +11:00

62 lines
1.4 KiB
Go

package ctrl
import (
"net/http"
. "github.com/mickael-kerjean/nuage/server/common"
. "github.com/mickael-kerjean/nuage/server/middleware"
"github.com/mickael-kerjean/nuage/server/model"
"github.com/mickael-kerjean/net/webdav"
"github.com/mickael-kerjean/mux"
"time"
"fmt"
)
var start time.Time = time.Now()
func WebdavHandler(ctx App, res http.ResponseWriter, req *http.Request) {
share_id := mux.Vars(req)["share"]
prefix := "/s/" + share_id
req.Header.Del("Content-Type")
if req.Method == "GET" {
if req.URL.Path == prefix {
DefaultHandler(FILE_INDEX, ctx).ServeHTTP(res, req)
return
}
}
var err error
if ctx.Session, err = ExtractSession(req, &ctx); err != nil {
http.NotFound(res, req)
return
}
if ctx.Backend, err = ExtractBackend(req, &ctx); err != nil || ctx.Backend == nil {
http.NotFound(res, req)
return
}
if share_id == "" {
http.NotFound(res, req)
return
}
// webdav is WIP
http.NotFound(res, req)
return
h := &webdav.Handler{
Prefix: "/s/" + share_id,
FileSystem: model.NewWebdavFs(ctx.Backend, ctx.Session["path"]),
LockSystem: webdav.NewMemLS(),
Logger: func(r *http.Request, err error) {
e := func(err error) string{
if err != nil {
return err.Error()
}
return "OK"
}(err)
Log.Info(fmt.Sprintf("INFO %s WEBDAV %s %s %s", share_id, req.Method, req.URL.Path, e))
},
}
h.ServeHTTP(res, req)
}