From 00e31999103cb473fe77ad860f466533e63ed246 Mon Sep 17 00:00:00 2001 From: gmgigi96 Date: Mon, 24 Apr 2023 14:50:35 +0200 Subject: [PATCH 1/3] fix propfind result for ocm share --- pkg/ocm/storage/outcoming/ocm.go | 89 ++++++++++++++++---------------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/pkg/ocm/storage/outcoming/ocm.go b/pkg/ocm/storage/outcoming/ocm.go index 672dc89ec1..5c179d4e16 100644 --- a/pkg/ocm/storage/outcoming/ocm.go +++ b/pkg/ocm/storage/outcoming/ocm.go @@ -176,8 +176,8 @@ func (d *driver) CreateDir(ctx context.Context, ref *provider.Reference) error { return err } - return d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, ref *provider.Reference) error { - res, err := d.gateway.CreateContainer(userCtx, &provider.CreateContainerRequest{Ref: ref}) + return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, ref *provider.Reference) error { + res, err := d.gateway.CreateContainer(ctx, &provider.CreateContainerRequest{Ref: ref}) switch { case err != nil: return err @@ -195,8 +195,8 @@ func (d *driver) TouchFile(ctx context.Context, ref *provider.Reference) error { return err } - return d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, ref *provider.Reference) error { - res, err := d.gateway.TouchFile(userCtx, &provider.TouchFileRequest{Ref: ref}) + return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, ref *provider.Reference) error { + res, err := d.gateway.TouchFile(ctx, &provider.TouchFileRequest{Ref: ref}) switch { case err != nil: return err @@ -214,8 +214,8 @@ func (d *driver) Delete(ctx context.Context, ref *provider.Reference) error { return err } - return d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, ref *provider.Reference) error { - res, err := d.gateway.Delete(userCtx, &provider.DeleteRequest{Ref: ref}) + return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, ref *provider.Reference) error { + res, err := d.gateway.Delete(ctx, &provider.DeleteRequest{Ref: ref}) switch { case err != nil: return err @@ -263,12 +263,12 @@ func (d *driver) opFromUser(ctx context.Context, userID *userv1beta1.UserId, f f } func (d *driver) unwrappedOpFromShareCreator(ctx context.Context, share *ocmv1beta1.Share, rel string, f func(ctx context.Context, ref *provider.Reference) error) error { - return d.opFromUser(ctx, share.Creator, func(userCtx context.Context) error { - newRef, err := d.translateOCMShareResourceToCS3Ref(userCtx, share.ResourceId, rel) + return d.opFromUser(ctx, share.Creator, func(ctx context.Context) error { + newRef, err := d.translateOCMShareResourceToCS3Ref(ctx, share.ResourceId, rel) if err != nil { return err } - return f(userCtx, newRef) + return f(ctx, newRef) }) } @@ -279,17 +279,16 @@ func (d *driver) GetMD(ctx context.Context, ref *provider.Reference, _ []string) } var info *provider.ResourceInfo - if err := d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { - info, err = d.stat(userCtx, newRef) - return err + if err := d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { + info, err = d.stat(ctx, newRef) + if err != nil { + return err + } + return d.augmentResourceInfo(ctx, info, share) }); err != nil { return nil, err } - if err := d.augmentResourceInfo(ctx, info, share); err != nil { - return nil, err - } - return info, nil } @@ -338,8 +337,8 @@ func (d *driver) ListFolder(ctx context.Context, ref *provider.Reference, _ []st } var infos []*provider.ResourceInfo - if err := d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { - lstRes, err := d.gateway.ListContainer(userCtx, &provider.ListContainerRequest{Ref: newRef}) + if err := d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { + lstRes, err := d.gateway.ListContainer(ctx, &provider.ListContainerRequest{Ref: newRef}) switch { case err != nil: return err @@ -349,21 +348,21 @@ func (d *driver) ListFolder(ctx context.Context, ref *provider.Reference, _ []st return errtypes.InternalError(lstRes.Status.Message) } infos = lstRes.Infos + + shareInfo, err := d.stat(ctx, &provider.Reference{ResourceId: share.ResourceId}) + if err != nil { + return err + } + + perms := getPermissionsFromShare(share) + for _, info := range infos { + fixResourceInfo(info, shareInfo, share, perms) + } return nil }); err != nil { return nil, err } - shareInfo, err := d.stat(ctx, &provider.Reference{ResourceId: share.ResourceId}) - if err != nil { - return nil, err - } - - perms := getPermissionsFromShare(share) - for _, info := range infos { - fixResourceInfo(info, shareInfo, share, perms) - } - return infos, nil } @@ -403,8 +402,8 @@ func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io return err } - return d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { - initRes, err := d.gateway.InitiateFileUpload(userCtx, &provider.InitiateFileUploadRequest{Ref: newRef}) + return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { + initRes, err := d.gateway.InitiateFileUpload(ctx, &provider.InitiateFileUploadRequest{Ref: newRef}) switch { case err != nil: return err @@ -417,7 +416,7 @@ func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io return errtypes.InternalError("simple upload not supported") } - httpReq, err := rhttp.NewRequest(userCtx, http.MethodPut, endpoint, content) + httpReq, err := rhttp.NewRequest(ctx, http.MethodPut, endpoint, content) if err != nil { return errors.Wrap(err, "error creating new request") } @@ -456,8 +455,8 @@ func (d *driver) Download(ctx context.Context, ref *provider.Reference) (io.Read } var r io.ReadCloser - if err := d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { - initRes, err := d.gateway.InitiateFileDownload(userCtx, &provider.InitiateFileDownloadRequest{Ref: newRef}) + if err := d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { + initRes, err := d.gateway.InitiateFileDownload(ctx, &provider.InitiateFileDownloadRequest{Ref: newRef}) switch { case err != nil: return err @@ -472,7 +471,7 @@ func (d *driver) Download(ctx context.Context, ref *provider.Reference) (io.Read return errtypes.InternalError("simple download not supported") } - httpReq, err := rhttp.NewRequest(userCtx, http.MethodGet, endpoint, nil) + httpReq, err := rhttp.NewRequest(ctx, http.MethodGet, endpoint, nil) if err != nil { return err } @@ -509,7 +508,7 @@ func (d *driver) SetLock(ctx context.Context, ref *provider.Reference, lock *pro return err } - return d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { + return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { lockRes, err := d.gateway.SetLock(ctx, &provider.SetLockRequest{ Ref: newRef, Lock: lock, @@ -535,8 +534,8 @@ func (d *driver) GetLock(ctx context.Context, ref *provider.Reference) (*provide } var lock *provider.Lock - if err := d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { - lockRes, err := d.gateway.GetLock(userCtx, &provider.GetLockRequest{Ref: newRef}) + if err := d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { + lockRes, err := d.gateway.GetLock(ctx, &provider.GetLockRequest{Ref: newRef}) switch { case err != nil: return err @@ -560,8 +559,8 @@ func (d *driver) RefreshLock(ctx context.Context, ref *provider.Reference, lock return err } - return d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { - lockRes, err := d.gateway.RefreshLock(userCtx, &provider.RefreshLockRequest{ + return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { + lockRes, err := d.gateway.RefreshLock(ctx, &provider.RefreshLockRequest{ Ref: newRef, ExistingLockId: existingLockID, Lock: lock, @@ -586,8 +585,8 @@ func (d *driver) Unlock(ctx context.Context, ref *provider.Reference, lock *prov return err } - return d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { - lockRes, err := d.gateway.Unlock(userCtx, &provider.UnlockRequest{ + return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { + lockRes, err := d.gateway.Unlock(ctx, &provider.UnlockRequest{ Ref: newRef, Lock: lock, }) @@ -611,8 +610,8 @@ func (d *driver) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen return err } - return d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { - res, err := d.gateway.SetArbitraryMetadata(userCtx, &provider.SetArbitraryMetadataRequest{ + return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { + res, err := d.gateway.SetArbitraryMetadata(ctx, &provider.SetArbitraryMetadataRequest{ Ref: newRef, ArbitraryMetadata: md, }) @@ -634,8 +633,8 @@ func (d *driver) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refer return err } - return d.unwrappedOpFromShareCreator(ctx, share, rel, func(userCtx context.Context, newRef *provider.Reference) error { - res, err := d.gateway.UnsetArbitraryMetadata(userCtx, &provider.UnsetArbitraryMetadataRequest{ + return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error { + res, err := d.gateway.UnsetArbitraryMetadata(ctx, &provider.UnsetArbitraryMetadataRequest{ Ref: newRef, ArbitraryMetadataKeys: keys, }) From a4ce5e6babb370272e8679d45ddd77b254b63809 Mon Sep 17 00:00:00 2001 From: gmgigi96 Date: Mon, 24 Apr 2023 14:50:35 +0200 Subject: [PATCH 2/3] fix doc --- docs/content/en/docs/tutorials/share-tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/en/docs/tutorials/share-tutorial.md b/docs/content/en/docs/tutorials/share-tutorial.md index 9ded80828c..153c68a08e 100644 --- a/docs/content/en/docs/tutorials/share-tutorial.md +++ b/docs/content/en/docs/tutorials/share-tutorial.md @@ -158,7 +158,7 @@ In this case, the share can be accessed using the WebDAV protocol (multiple acce For example: ``` # curl -X PROPFIND http://localhost:19001/remote.php/dav/ocm/eSWNjTWjorFmZEGQNZVyrU3TyxdWEr1D -/remote.php/dav/ocm/eSWNjTWjorFmZEGQNZVyrU3TyxdWEr1D/home/my-folder/123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder"e35fa97883e0481aabf235abb8eb6b1f"SDNVCK25Tue, 11 Apr 2023 09:56:29 GMT0HTTP/1.1 200 OK/remote.php/dav/ocm/eSWNjTWjorFmZEGQNZVyrU3TyxdWEr1D/home/my-folder/example.txt123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder%2Fexample.txt123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder%2Fexample.txt"bf73fa7d3ebf18b3cff6d64ed25a7de0"SDNVW33text/plainTue, 11 Apr 2023 09:56:29 GMT0HTTP/1.1 200 OK +/remote.php/dav/ocm/eSWNjTWjorFmZEGQNZVyrU3TyxdWEr1D/123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder"e35fa97883e0481aabf235abb8eb6b1f"SDNVCK25Tue, 11 Apr 2023 09:56:29 GMT0HTTP/1.1 200 OK/remote.php/dav/ocm/eSWNjTWjorFmZEGQNZVyrU3TyxdWEr1D/example.txt123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder%2Fexample.txt123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder%2Fexample.txt"bf73fa7d3ebf18b3cff6d64ed25a7de0"SDNVW33text/plainTue, 11 Apr 2023 09:56:29 GMT0HTTP/1.1 200 OK ``` In particular, reva allows an user to navigate the received shares in a more user-friendly way, exposing the shares under the `/sciencemesh` mount point. The format to access a received share is `/sciencemesh/[/]`. From 66d04db033f2198aa0a96a47736f2a374ea33380 Mon Sep 17 00:00:00 2001 From: gmgigi96 Date: Mon, 24 Apr 2023 17:31:29 +0200 Subject: [PATCH 3/3] add changelog --- changelog/unreleased/ocm-propfind.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changelog/unreleased/ocm-propfind.md diff --git a/changelog/unreleased/ocm-propfind.md b/changelog/unreleased/ocm-propfind.md new file mode 100644 index 0000000000..f97b0bb093 --- /dev/null +++ b/changelog/unreleased/ocm-propfind.md @@ -0,0 +1,4 @@ +Bugfix: Fix propfind URL for OCM shares + +https://github.com/cs3org/reva/pull/3813 +https://github.com/cs3org/reva/issues/3810