mirror of
https://github.com/hacdias/webdav.git
synced 2026-09-22 03:20:41 +08:00
+10
-2
@@ -23,6 +23,8 @@ type Handler struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewHandler(c *Config) (http.Handler, error) {
|
func NewHandler(c *Config) (http.Handler, error) {
|
||||||
|
ls := webdav.NewMemLS()
|
||||||
|
|
||||||
h := &Handler{
|
h := &Handler{
|
||||||
noPassword: c.NoPassword,
|
noPassword: c.NoPassword,
|
||||||
behindProxy: c.BehindProxy,
|
behindProxy: c.BehindProxy,
|
||||||
@@ -36,7 +38,10 @@ func NewHandler(c *Config) (http.Handler, error) {
|
|||||||
Dir: webdav.Dir(c.Directory),
|
Dir: webdav.Dir(c.Directory),
|
||||||
noSniff: c.NoSniff,
|
noSniff: c.NoSniff,
|
||||||
},
|
},
|
||||||
LockSystem: webdav.NewMemLS(),
|
LockSystem: &lockSystem{
|
||||||
|
LockSystem: ls,
|
||||||
|
directory: c.Directory,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
users: map[string]*handlerUser{},
|
users: map[string]*handlerUser{},
|
||||||
@@ -51,7 +56,10 @@ func NewHandler(c *Config) (http.Handler, error) {
|
|||||||
Dir: webdav.Dir(u.Directory),
|
Dir: webdav.Dir(u.Directory),
|
||||||
noSniff: c.NoSniff,
|
noSniff: c.NoSniff,
|
||||||
},
|
},
|
||||||
LockSystem: webdav.NewMemLS(),
|
LockSystem: &lockSystem{
|
||||||
|
LockSystem: ls,
|
||||||
|
directory: u.Directory,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package lib
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/net/webdav"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ webdav.LockSystem = &lockSystem{}
|
||||||
|
|
||||||
|
// LockSystem wraps a [webdav.LockSystem] with a root directory, allowing
|
||||||
|
// to reuse the same [webdav.LockSystem] for multiple users with different base
|
||||||
|
// directories, meaning we can correctly lock the files across different users.
|
||||||
|
type lockSystem struct {
|
||||||
|
webdav.LockSystem
|
||||||
|
directory string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *lockSystem) Confirm(now time.Time, name0, name1 string, conditions ...webdav.Condition) (release func(), err error) {
|
||||||
|
if name0 != "" {
|
||||||
|
name0 = filepath.Join(l.directory, name0)
|
||||||
|
}
|
||||||
|
|
||||||
|
if name1 != "" {
|
||||||
|
name1 = filepath.Join(l.directory, name1)
|
||||||
|
}
|
||||||
|
|
||||||
|
return l.LockSystem.Confirm(now, name0, name1, conditions...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *lockSystem) Create(now time.Time, details webdav.LockDetails) (token string, err error) {
|
||||||
|
details.Root = filepath.Join(l.directory, details.Root)
|
||||||
|
return l.LockSystem.Create(now, details)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user