Skip to content

Commit

Permalink
[full-ci] fix(sharing-ng): align sharedWithMe driveItem IDs with PROP…
Browse files Browse the repository at this point in the history
…FIND response (#8467)

* Bump reva

Fixes: #8080

* fix(sharing-ng): align sharedWithMe driveItem IDs

The IDs of the driveItems returned by the 'sharedWithMe' endpoint
should match the ids returned by the webdav PROPFIND response on
the share jail.

Fixes: #8420
  • Loading branch information
rhafer authored Feb 21, 2024
1 parent 7772455 commit b6fea0f
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 49 deletions.
9 changes: 9 additions & 0 deletions changelog/unreleased/sharing-ng-driveitemid.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Bugfix: graph/sharedWithMe align IDs with webdav response

The IDs of the driveItems returned by the 'graph/v1beta1/me/drive/sharedWithMe'
endpoint are now aligned with the IDs returned in the PROPFIND response
of the webdav service.

https://github.com/owncloud/ocis/pull/8467
https://github.com/owncloud/ocis/issues/8420
https://github.com/owncloud/ocis/issues/8080
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ require (
github.com/cenkalti/backoff v2.2.1+incompatible
github.com/coreos/go-oidc/v3 v3.9.0
github.com/cs3org/go-cs3apis v0.0.0-20231023073225-7748710e0781
github.com/cs3org/reva/v2 v2.18.1-0.20240221074425-cac6c6935c60
github.com/cs3org/reva/v2 v2.18.1-0.20240221104842-3fb1ef6dc93a
github.com/dhowden/tag v0.0.0-20230630033851-978a0926ee25
github.com/disintegration/imaging v1.6.2
github.com/dutchcoders/go-clamd v0.0.0-20170520113014-b970184f4d9e
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1019,8 +1019,8 @@ github.com/crewjam/saml v0.4.14 h1:g9FBNx62osKusnFzs3QTN5L9CVA/Egfgm+stJShzw/c=
github.com/crewjam/saml v0.4.14/go.mod h1:UVSZCf18jJkk6GpWNVqcyQJMD5HsRugBPf4I1nl2mME=
github.com/cs3org/go-cs3apis v0.0.0-20231023073225-7748710e0781 h1:BUdwkIlf8IS2FasrrPg8gGPHQPOrQ18MS1Oew2tmGtY=
github.com/cs3org/go-cs3apis v0.0.0-20231023073225-7748710e0781/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY=
github.com/cs3org/reva/v2 v2.18.1-0.20240221074425-cac6c6935c60 h1:cx4hWeWKYnIa8m5z9JncRc+lt/+RB3mwg/kZWBbDPAc=
github.com/cs3org/reva/v2 v2.18.1-0.20240221074425-cac6c6935c60/go.mod h1:GRUrOp5HbFVwZTgR9bVrMZ/MvVy+Jhxw1PdMmhhKP9E=
github.com/cs3org/reva/v2 v2.18.1-0.20240221104842-3fb1ef6dc93a h1:iD9HJRGtIqBxEl9AM9U8t1rd+SCtNyst+uotSwEebT4=
github.com/cs3org/reva/v2 v2.18.1-0.20240221104842-3fb1ef6dc93a/go.mod h1:GRUrOp5HbFVwZTgR9bVrMZ/MvVy+Jhxw1PdMmhhKP9E=
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
Expand Down
34 changes: 25 additions & 9 deletions services/graph/pkg/service/v0/sharedwithme.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,25 +92,24 @@ func (g Graph) cs3ReceivedSharesToDriveItems(ctx context.Context, receivedShares

group.Go(func() error {
var err error // redeclare
resourceID := receivedShares[0].GetShare().GetResourceId()
shareStat, err := doStat(receivedShares[0].GetShare().GetResourceId())
if shareStat == nil || err != nil {
return err
}

driveItem := libregraph.NewDriveItem()

// The id of the driveItem will be the composed of the StorageID and the SpaceID of the sharestorage
// appended with the ResourceID of the shared resource
// '<sharestorageid>$<sharespaceid>!<resource's storageid>:<resource's spaceid>:<resource's opaque id>'
driveItem.SetId(storagespace.FormatResourceID(storageprovider.ResourceId{
StorageId: utils.ShareStorageProviderID,
OpaqueId: resourceID.GetStorageId() + ":" + resourceID.GetSpaceId() + ":" + resourceID.GetOpaqueId(),
SpaceId: utils.ShareStorageSpaceID,
}))
permissions := make([]libregraph.Permission, 0, len(receivedShares))

var oldestReceivedShare *collaboration.ReceivedShare
for _, receivedShare := range receivedShares {
switch {
case oldestReceivedShare == nil:
fallthrough
case utils.TSToTime(receivedShare.GetShare().GetCtime()).Before(utils.TSToTime(oldestReceivedShare.GetShare().GetCtime())):
oldestReceivedShare = receivedShare
}

permission, err := g.cs3ReceivedShareToLibreGraphPermissions(ctx, receivedShare)
if err != nil {
return err
Expand Down Expand Up @@ -150,6 +149,23 @@ func (g Graph) cs3ReceivedSharesToDriveItems(ctx context.Context, receivedShares

}

// To stay compatible with the usershareprovider and the webdav
// service the id of the driveItem is composed of the StorageID and
// SpaceID of the sharestorage appended with the opaque ID of
// the oldest share for the resource:
// '<sharestorageid>$<sharespaceid>!<share-opaque-id>
// Note: This means that the driveitem ID will change when the oldest
// shared is removed. It would be good to have are more stable ID here (e.g.
// derived from the shared resource's ID. But as we need to use the same
// ID across all services this means we needed to make similar adjustments
// to the sharejail (usershareprovider, webdav). Which we can't currently do
// as some clients rely on the IDs used there having a special format.
driveItem.SetId(storagespace.FormatResourceID(storageprovider.ResourceId{
StorageId: utils.ShareStorageProviderID,
OpaqueId: oldestReceivedShare.GetShare().GetId().GetOpaqueId(),
SpaceId: utils.ShareStorageSpaceID,
}))

if !driveItem.HasUIHidden() {
driveItem.SetUIHidden(false)
}
Expand Down
3 changes: 3 additions & 0 deletions services/graph/pkg/service/v0/sharedwithme_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ var _ = Describe("SharedWithMe", func() {
Permissions: roleconversions.NewViewerRole(true).CS3ResourcePermissions(),
},
Creator: getUserResponseShareCreator.User.Id,
Ctime: utils.TSNow(),
},
MountPoint: &providerv1beta1.Reference{
ResourceId: &providerv1beta1.ResourceId{
Expand Down Expand Up @@ -213,6 +214,7 @@ var _ = Describe("SharedWithMe", func() {
Hidden: true,
Share: &collaborationv1beta1.Share{
ResourceId: toResourceID("7$8!9"),
Ctime: utils.TSNow(),
},
})

Expand Down Expand Up @@ -405,6 +407,7 @@ var _ = Describe("SharedWithMe", func() {
Permissions: roleconversions.NewViewerRole(true).CS3ResourcePermissions(),
},
Creator: getUserResponseShareCreator.User.Id,
Ctime: utils.TSNow(),
Grantee: &providerv1beta1.Grantee{
Type: providerv1beta1.GranteeType_GRANTEE_TYPE_GROUP,
Id: &providerv1beta1.Grantee_GroupId{
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion vendor/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1
github.com/cs3org/go-cs3apis/cs3/storage/registry/v1beta1
github.com/cs3org/go-cs3apis/cs3/tx/v1beta1
github.com/cs3org/go-cs3apis/cs3/types/v1beta1
# github.com/cs3org/reva/v2 v2.18.1-0.20240221074425-cac6c6935c60
# github.com/cs3org/reva/v2 v2.18.1-0.20240221104842-3fb1ef6dc93a
## explicit; go 1.21
github.com/cs3org/reva/v2/cmd/revad/internal/grace
github.com/cs3org/reva/v2/cmd/revad/runtime
Expand Down

0 comments on commit b6fea0f

Please sign in to comment.