diff --git a/filemanager.go b/filemanager.go index 0be50ccf..33739cc3 100644 --- a/filemanager.go +++ b/filemanager.go @@ -10,6 +10,11 @@ import ( "golang.org/x/net/webdav" ) +var ( + // ErrDuplicated occurs when you try to create a user that already exists. + ErrDuplicated = errors.New("Duplicated user") +) + // FileManager is a file manager instance. type FileManager struct { *user @@ -88,7 +93,7 @@ type Rule struct { type CommandFunc func(r *http.Request, c *FileManager, u *user) error -func New() *FileManager { +func New(scope string) *FileManager { m := &FileManager{ user: &user{ AllowCommands: true, @@ -111,7 +116,7 @@ func New() *FileManager { }, } - m.SetScope(".", "") + m.SetScope(scope, "") m.SetBaseURL("/") m.SetWebDavURL("/webdav") @@ -192,8 +197,25 @@ func (m *FileManager) SetScope(scope string, username string) error { return nil } -func (m *FileManager) NewUser(name string) { +// NewUser creates a new user on a File Manager struct +// which inherits its configuration from the main user. +func (m *FileManager) NewUser(username string) error { + if _, ok := m.Users[username]; ok { + return ErrDuplicated + } + m.Users[username] = &user{ + scope: m.user.scope, + fileSystem: m.user.fileSystem, + handler: m.user.handler, + Rules: m.user.Rules, + AllowNew: m.user.AllowNew, + AllowEdit: m.user.AllowEdit, + AllowCommands: m.user.AllowCommands, + Commands: m.user.Commands, + } + + return nil } // Allowed checks if the user has permission to access a directory/file.