From 37b82d34794a60de7c9aeb15448dc5352425cfaa Mon Sep 17 00:00:00 2001 From: jkoberg Date: Mon, 15 Apr 2024 16:50:03 +0200 Subject: [PATCH] feat(events): space share updated event Signed-off-by: jkoberg --- changelog/unreleased/space-share-updated.md | 5 +++++ .../interceptors/eventsmiddleware/conversion.go | 12 ++++++++++++ .../grpc/interceptors/eventsmiddleware/events.go | 5 +++++ pkg/events/spaces.go | 16 ++++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 changelog/unreleased/space-share-updated.md diff --git a/changelog/unreleased/space-share-updated.md b/changelog/unreleased/space-share-updated.md new file mode 100644 index 0000000000..1d0696a9fc --- /dev/null +++ b/changelog/unreleased/space-share-updated.md @@ -0,0 +1,5 @@ +Enhancement: Add space-share-updated event + +This event is triggered when a share on a space root (aka space membership) is changed + +https://github.com/cs3org/reva/pull/4631 diff --git a/internal/grpc/interceptors/eventsmiddleware/conversion.go b/internal/grpc/interceptors/eventsmiddleware/conversion.go index edcab27e37..1a123f1ca9 100644 --- a/internal/grpc/interceptors/eventsmiddleware/conversion.go +++ b/internal/grpc/interceptors/eventsmiddleware/conversion.go @@ -356,6 +356,18 @@ func SpaceShared(r *provider.AddGrantResponse, req *provider.AddGrantRequest, ex } } +// SpaceShareUpdated converts the response to an events +func SpaceShareUpdated(r *provider.UpdateGrantResponse, req *provider.UpdateGrantRequest, executant *user.UserId) events.SpaceShareUpdated { + id := storagespace.FormatStorageID(req.Ref.ResourceId.StorageId, req.Ref.ResourceId.SpaceId) + return events.SpaceShareUpdated{ + Executant: executant, + GranteeUserID: req.Grant.GetGrantee().GetUserId(), + GranteeGroupID: req.Grant.GetGrantee().GetGroupId(), + ID: &provider.StorageSpaceId{OpaqueId: id}, + Timestamp: time.Now(), + } +} + // SpaceUnshared converts the response to an event func SpaceUnshared(r *provider.RemoveGrantResponse, req *provider.RemoveGrantRequest, executant *user.UserId) events.SpaceUnshared { id := storagespace.FormatStorageID(req.Ref.ResourceId.StorageId, req.Ref.ResourceId.SpaceId) diff --git a/internal/grpc/interceptors/eventsmiddleware/events.go b/internal/grpc/interceptors/eventsmiddleware/events.go index 4735b34589..ca4086bfb2 100644 --- a/internal/grpc/interceptors/eventsmiddleware/events.go +++ b/internal/grpc/interceptors/eventsmiddleware/events.go @@ -123,6 +123,11 @@ func NewUnary(m map[string]interface{}) (grpc.UnaryServerInterceptor, int, error if isSuccess(v) && utils.ExistsInOpaque(r.Opaque, "spacegrant") { ev = SpaceShared(v, r, executantID) } + case *provider.UpdateGrantResponse: + r := req.(*provider.UpdateGrantRequest) + if isSuccess(v) && utils.ExistsInOpaque(r.Opaque, "spacegrant") { + ev = SpaceShareUpdated(v, r, executantID) + } case *provider.RemoveGrantResponse: r := req.(*provider.RemoveGrantRequest) if isSuccess(v) && utils.ExistsInOpaque(r.Opaque, "spacegrant") { diff --git a/pkg/events/spaces.go b/pkg/events/spaces.go index 03ab3ff0a6..c24ac48282 100644 --- a/pkg/events/spaces.go +++ b/pkg/events/spaces.go @@ -125,6 +125,22 @@ func (SpaceShared) Unmarshal(v []byte) (interface{}, error) { return e, err } +// SpaceShareUpdated is emitted when a space share is updated +type SpaceShareUpdated struct { + Executant *user.UserId + GranteeUserID *user.UserId + GranteeGroupID *group.GroupId + ID *provider.StorageSpaceId + Timestamp time.Time +} + +// Unmarshal to fulfill umarshaller interface +func (SpaceShareUpdated) Unmarshal(v []byte) (interface{}, error) { + ev := SpaceShareUpdated{} + err := json.Unmarshal(v, &ev) + return ev, err +} + // SpaceUnshared is emitted when a space is unshared type SpaceUnshared struct { Executant *user.UserId