Skip to content

Commit

Permalink
Fix propfind URL for OCM shares (cs3org#3813)
Browse files Browse the repository at this point in the history
* fix propfind result for ocm share

* fix doc

* add changelog
  • Loading branch information
gmgigi96 committed Jun 28, 2023
1 parent 20be8e6 commit 3000aa3
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 46 deletions.
4 changes: 4 additions & 0 deletions changelog/unreleased/ocm-propfind.md
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion docs/content/en/docs/tutorials/share-tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
<?xml version="1.0" encoding="utf-8"?><d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns"><d:response><d:href>/remote.php/dav/ocm/eSWNjTWjorFmZEGQNZVyrU3TyxdWEr1D/home/my-folder/</d:href><d:propstat><d:prop><oc:id>123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder</oc:id><oc:fileid>123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder</oc:fileid><d:getetag>&#34;e35fa97883e0481aabf235abb8eb6b1f&#34;</d:getetag><oc:permissions>SDNVCK</oc:permissions><d:resourcetype><d:collection/></d:resourcetype><oc:size>25</oc:size><d:getlastmodified>Tue, 11 Apr 2023 09:56:29 GMT</d:getlastmodified><oc:favorite>0</oc:favorite></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response><d:response><d:href>/remote.php/dav/ocm/eSWNjTWjorFmZEGQNZVyrU3TyxdWEr1D/home/my-folder/example.txt</d:href><d:propstat><d:prop><oc:id>123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder%2Fexample.txt</oc:id><oc:fileid>123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder%2Fexample.txt</oc:fileid><d:getetag>&#34;bf73fa7d3ebf18b3cff6d64ed25a7de0&#34;</d:getetag><oc:permissions>SDNVW</oc:permissions><d:resourcetype></d:resourcetype><d:getcontentlength>33</d:getcontentlength><d:getcontenttype>text/plain</d:getcontenttype><d:getlastmodified>Tue, 11 Apr 2023 09:56:29 GMT</d:getlastmodified><oc:favorite>0</oc:favorite></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response></d:multistatus>
<?xml version="1.0" encoding="utf-8"?><d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns"><d:response><d:href>/remote.php/dav/ocm/eSWNjTWjorFmZEGQNZVyrU3TyxdWEr1D/</d:href><d:propstat><d:prop><oc:id>123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder</oc:id><oc:fileid>123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder</oc:fileid><d:getetag>&#34;e35fa97883e0481aabf235abb8eb6b1f&#34;</d:getetag><oc:permissions>SDNVCK</oc:permissions><d:resourcetype><d:collection/></d:resourcetype><oc:size>25</oc:size><d:getlastmodified>Tue, 11 Apr 2023 09:56:29 GMT</d:getlastmodified><oc:favorite>0</oc:favorite></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response><d:response><d:href>/remote.php/dav/ocm/eSWNjTWjorFmZEGQNZVyrU3TyxdWEr1D/example.txt</d:href><d:propstat><d:prop><oc:id>123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder%2Fexample.txt</oc:id><oc:fileid>123e4567-e89b-12d3-a456-426655440000!fileid-einstein%2Fmy-folder%2Fexample.txt</oc:fileid><d:getetag>&#34;bf73fa7d3ebf18b3cff6d64ed25a7de0&#34;</d:getetag><oc:permissions>SDNVW</oc:permissions><d:resourcetype></d:resourcetype><d:getcontentlength>33</d:getcontentlength><d:getcontenttype>text/plain</d:getcontenttype><d:getlastmodified>Tue, 11 Apr 2023 09:56:29 GMT</d:getlastmodified><oc:favorite>0</oc:favorite></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response></d:multistatus>
```

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/<share-id>[/<relative-path>]`.
Expand Down
89 changes: 44 additions & 45 deletions pkg/ocm/storage/outcoming/ocm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)
})
}

Expand All @@ -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
}

Expand Down Expand Up @@ -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
Expand All @@ -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
}

Expand Down Expand Up @@ -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
Expand All @@ -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")
}
Expand Down Expand Up @@ -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
Expand All @@ -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
}
Expand Down Expand Up @@ -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,
Expand All @@ -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
Expand All @@ -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,
Expand All @@ -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,
})
Expand All @@ -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,
})
Expand All @@ -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,
})
Expand Down

0 comments on commit 3000aa3

Please sign in to comment.