From 752c0df4e903d17a2607dc7fae6d10b46a38b299 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Fri, 19 Jul 2024 10:44:57 +0200 Subject: [PATCH] fix: missing invitation in permission responses Fixes a bug where the `invitation` property is missing in the response when creating, listing or updating graph permissions. --- .../bugfix-missing-invitation-in-permissions.md | 6 ++++++ .../pkg/service/v0/api_driveitem_permissions.go | 14 ++++++++++++++ services/graph/pkg/service/v0/base.go | 13 +++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 changelog/unreleased/bugfix-missing-invitation-in-permissions.md diff --git a/changelog/unreleased/bugfix-missing-invitation-in-permissions.md b/changelog/unreleased/bugfix-missing-invitation-in-permissions.md new file mode 100644 index 0000000000..8a73e82df6 --- /dev/null +++ b/changelog/unreleased/bugfix-missing-invitation-in-permissions.md @@ -0,0 +1,6 @@ +Bugfix: Missing invitation in permission responses + +We have fixed a bug where the `invitation` property was missing in the response when creating, listing or updating graph permissions. + +https://github.com/owncloud/ocis/pull/9652 +https://github.com/owncloud/ocis/issues/9571 diff --git a/services/graph/pkg/service/v0/api_driveitem_permissions.go b/services/graph/pkg/service/v0/api_driveitem_permissions.go index f51c1ed716..4c169b1d28 100644 --- a/services/graph/pkg/service/v0/api_driveitem_permissions.go +++ b/services/graph/pkg/service/v0/api_driveitem_permissions.go @@ -16,6 +16,7 @@ import ( ocm "github.com/cs3org/go-cs3apis/cs3/sharing/ocm/v1beta1" storageprovider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" + revactx "github.com/cs3org/reva/v2/pkg/ctx" "github.com/cs3org/reva/v2/pkg/publicshare" "github.com/cs3org/reva/v2/pkg/rgrpc/todo/pool" "github.com/cs3org/reva/v2/pkg/share" @@ -224,6 +225,19 @@ func (s DriveItemPermissionsService) Invite(ctx context.Context, resourceId *sto permission.SetExpirationDateTime(utils.TSToTime(expiration)) } + if user, ok := revactx.ContextGetUser(ctx); ok { + identity, err := userIdToIdentity(ctx, s.identityCache, user.GetId().GetOpaqueId()) + if err != nil { + s.logger.Error().Err(err).Msg("identity lookup failed") + return libregraph.Permission{}, errorcode.New(errorcode.InvalidRequest, err.Error()) + } + permission.SetInvitation(libregraph.SharingInvitation{ + InvitedBy: &libregraph.IdentitySet{ + User: &identity, + }, + }) + } + return *permission, nil } diff --git a/services/graph/pkg/service/v0/base.go b/services/graph/pkg/service/v0/base.go index 8e157217aa..dff462afdb 100644 --- a/services/graph/pkg/service/v0/base.go +++ b/services/graph/pkg/service/v0/base.go @@ -404,6 +404,19 @@ func (g BaseGraphService) cs3UserShareToPermission(ctx context.Context, share *c perm.SetRoles(nil) } perm.SetGrantedToV2(grantedTo) + if share.GetCreator() != nil { + identity, err := cs3UserIdToIdentity(ctx, g.identityCache, share.GetCreator()) + if err != nil { + return nil, errorcode.New(errorcode.GeneralException, err.Error()) + } + perm.SetInvitation( + libregraph.SharingInvitation{ + InvitedBy: &libregraph.IdentitySet{ + User: &identity, + }, + }, + ) + } return &perm, nil }