feat(admin): enable multi-users (#67)

* feat(userstore): support ListUsers

* feat(userstore): support del users

* feat(multiusers): support list users and delete user apis

* feat(client/web): add new apis to web client

* fix(ui/panes): move each pane out of the container

* feat(ui): add admin pane

* feat(users): support force set password api

* feat(ui/admin-pane): add functions to admin pane

* feat(users): support self API and move uploading folder to home

* fix(users): remove home folder when deleting user

* fix(ui): remove useless function

* feat(ui/panes): hide admin menu if user is not admin

* fix(server/files): list home path is incorrect

* fix(server): 1.listHome return incorrect cwd 2.addUser init folder with incorrect uid 3.check ns before using

* test(server): add regression test cases

* test(users, files): add e2e test for concurrent operations

* fix(test): clean ups
This commit is contained in:
Hexxa 2021-07-30 21:59:33 -05:00 committed by GitHub
parent 916ec7c2dc
commit aefaca98b3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 1562 additions and 478 deletions

View file

@ -118,7 +118,7 @@ func (h *FileHandlers) Create(c *gin.Context) {
return
}
tmpFilePath := q.GetTmpPath(userID, req.Path)
tmpFilePath := q.UploadPath(userID, req.Path)
locker := h.NewAutoLocker(c, lockName(tmpFilePath))
locker.Exec(func() {
err := h.deps.FS().Create(tmpFilePath)
@ -295,7 +295,7 @@ func (h *FileHandlers) UploadChunk(c *gin.Context) {
return
}
tmpFilePath := q.GetTmpPath(userID, req.Path)
tmpFilePath := q.UploadPath(userID, req.Path)
locker := h.NewAutoLocker(c, lockName(tmpFilePath))
locker.Exec(func() {
var err error
@ -407,7 +407,7 @@ func (h *FileHandlers) UploadStatus(c *gin.Context) {
return
}
tmpFilePath := q.GetTmpPath(userID, filePath)
tmpFilePath := q.UploadPath(userID, filePath)
locker := h.NewAutoLocker(c, lockName(tmpFilePath))
locker.Exec(func() {
_, fileSize, uploaded, err := h.uploadMgr.GetInfo(userID, tmpFilePath)
@ -549,7 +549,8 @@ func (h *FileHandlers) List(c *gin.Context) {
func (h *FileHandlers) ListHome(c *gin.Context) {
userID := c.MustGet(q.UserIDParam).(string)
infos, err := h.deps.FS().ListDir(userID)
fsPath := q.FsRootPath(userID, "/")
infos, err := h.deps.FS().ListDir(fsPath)
if err != nil {
c.JSON(q.ErrResp(c, 500, err))
return
@ -565,7 +566,7 @@ func (h *FileHandlers) ListHome(c *gin.Context) {
}
c.JSON(200, &ListResp{
Cwd: userID,
Cwd: fsPath,
Metadatas: metadatas,
})
}
@ -606,7 +607,7 @@ func (h *FileHandlers) DelUploading(c *gin.Context) {
userID := c.MustGet(q.UserIDParam).(string)
var err error
tmpFilePath := q.GetTmpPath(userID, filePath)
tmpFilePath := q.UploadPath(userID, filePath)
locker := h.NewAutoLocker(c, lockName(tmpFilePath))
locker.Exec(func() {
err = h.deps.FS().Remove(tmpFilePath)