diff --git a/src/client/files.go b/src/client/files.go index 08424b4..3d3639f 100644 --- a/src/client/files.go +++ b/src/client/files.go @@ -179,7 +179,14 @@ func (cl *FilesClient) AddSharing(dirpath string) (*http.Response, string, []err func (cl *FilesClient) DelSharing(dirpath string) (*http.Response, string, []error) { return cl.r.Delete(cl.url("/v1/fs/sharings")). AddCookie(cl.token). - Send(fileshdr.SharingReq{SharingPath: dirpath}). + Param(fileshdr.FilePathQuery, dirpath). + End() +} + +func (cl *FilesClient) IsSharing(dirpath string) (*http.Response, string, []error) { + return cl.r.Get(cl.url("/v1/fs/sharings/exist")). + AddCookie(cl.token). + Param(fileshdr.FilePathQuery, dirpath). End() } diff --git a/src/client/web/src/client/files.ts b/src/client/web/src/client/files.ts index 519a516..8cb788e 100644 --- a/src/client/web/src/client/files.ts +++ b/src/client/web/src/client/files.ts @@ -14,13 +14,12 @@ const listDirQuery = "dp"; function translateResp(resp: Response): Response { if (resp.status === 500) { if ( - (resp.data == null || resp.data === "") || - ( - resp.data.error != null && + resp.data == null || + resp.data === "" || + (resp.data.error != null && !resp.data.error.includes("fail to lock the file") && !resp.data.error.includes("offset != uploaded") && - !resp.data.error.includes("i/o timeout") - ) + !resp.data.error.includes("i/o timeout")) ) { return FatalErrResp(resp.statusText); } @@ -160,4 +159,34 @@ export class FilesClient extends BaseClient { }, }); }; + + addSharing = (dirPath: string): Promise => { + return this.do({ + method: "post", + url: `${this.url}/v1/fs/sharings`, + data: { + SharingPath: dirPath, + }, + }); + }; + + deleteSharing = (dirPath: string): Promise => { + return this.do({ + method: "delete", + url: `${this.url}/v1/fs/sharings`, + params: { + [filePathQuery]: dirPath, + }, + }); + }; + + isSharing = (dirPath: string): Promise => { + return this.do({ + method: "get", + url: `${this.url}/v1/fs/sharings/exist`, + params: { + [filePathQuery]: dirPath, + }, + }); + }; } diff --git a/src/handlers/fileshdr/handlers.go b/src/handlers/fileshdr/handlers.go index f20e158..1a7a36f 100644 --- a/src/handlers/fileshdr/handlers.go +++ b/src/handlers/fileshdr/handlers.go @@ -763,21 +763,21 @@ func (h *FileHandlers) AddSharing(c *gin.Context) { } func (h *FileHandlers) DelSharing(c *gin.Context) { - req := &SharingReq{} - if err := c.ShouldBindJSON(&req); err != nil { - c.JSON(q.ErrResp(c, 400, err)) + dirPath := c.Query(FilePathQuery) + if dirPath == "" { + c.JSON(q.ErrResp(c, 400, errors.New("invalid file path"))) return } // TODO: move canAccess to authedFS userName := c.MustGet(q.UserParam).(string) role := c.MustGet(q.RoleParam).(string) - if !h.canAccess(userName, role, "", req.SharingPath) { + if !h.canAccess(userName, role, "", dirPath) { c.JSON(q.ErrResp(c, 403, errors.New("forbidden"))) return } - err := h.deps.FileInfos().DelSharing(req.SharingPath) + err := h.deps.FileInfos().DelSharing(dirPath) if err != nil { c.JSON(q.ErrResp(c, 500, err)) return @@ -786,13 +786,13 @@ func (h *FileHandlers) DelSharing(c *gin.Context) { } func (h *FileHandlers) IsSharing(c *gin.Context) { - req := &SharingReq{} - if err := c.ShouldBindJSON(&req); err != nil { - c.JSON(q.ErrResp(c, 400, err)) + dirPath := c.Query(FilePathQuery) + if dirPath == "" { + c.JSON(q.ErrResp(c, 400, errors.New("invalid file path"))) return } - _, ok := h.deps.FileInfos().GetSharing(req.SharingPath) + _, ok := h.deps.FileInfos().GetSharing(dirPath) if ok { c.JSON(q.Resp(200)) } else { diff --git a/src/server/server_concurrency_test.go b/src/server/server_concurrency_test.go index cbb594e..bbdd64c 100644 --- a/src/server/server_concurrency_test.go +++ b/src/server/server_concurrency_test.go @@ -148,7 +148,6 @@ func TestConcurrency(t *testing.T) { if selfResp.UsedSpace != int64((filesCount-1)*len(content)) { t.Fatalf("usedSpace(%d) doesn't match (%d)", selfResp.UsedSpace, int64((filesCount-1)*len(content))) } - fmt.Println("\n\n\n", selfResp.UsedSpace, int64((filesCount-1)*len(content))) wg.Done() } diff --git a/src/server/server_files_test.go b/src/server/server_files_test.go index 6b10f8e..01fe63b 100644 --- a/src/server/server_files_test.go +++ b/src/server/server_files_test.go @@ -387,6 +387,22 @@ func TestFileHandlers(t *testing.T) { } } + for dirPath := range sharedPaths { + res, _, errs := cl.IsSharing(dirPath) + if len(errs) > 0 { + t.Fatal(errs) + } else if res.StatusCode != 200 { + t.Fatal(res.StatusCode) + } + + res, _, errs = cl.IsSharing(fmt.Sprintf("%s/", dirPath)) + if len(errs) > 0 { + t.Fatal(errs) + } else if res.StatusCode != 404 { + t.Fatal(res.StatusCode) + } + } + for _, dirPath := range shRes.SharingDirs { res, lsResp, errs := cl.List(dirPath) if len(errs) > 0 {