mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-27 19:53:41 +08:00
62 lines
1.4 KiB
Go
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)
|
|
}
|