From 370522e7cfa219e81bab9cd2e7554ea6e427c354 Mon Sep 17 00:00:00 2001 From: jkoberg Date: Mon, 15 Apr 2024 15:48:20 +0200 Subject: [PATCH] feat(clientlog): space/share created/removed sse Signed-off-by: jkoberg --- changelog/unreleased/sharing-sse.md | 5 ++++ services/clientlog/pkg/command/server.go | 4 ++++ services/clientlog/pkg/service/service.go | 29 +++++++++++++++++++---- 3 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 changelog/unreleased/sharing-sse.md diff --git a/changelog/unreleased/sharing-sse.md b/changelog/unreleased/sharing-sse.md new file mode 100644 index 0000000000..3a3a2d7d86 --- /dev/null +++ b/changelog/unreleased/sharing-sse.md @@ -0,0 +1,5 @@ +Enhancement: Sharing SSEs + +Added server side events for item moved, share created/removed, space membership created/removed, share/space membership updated. + +https://github.com/owncloud/ocis/pull/8854 diff --git a/services/clientlog/pkg/command/server.go b/services/clientlog/pkg/command/server.go index f3cab7adae..0fcbf60959 100644 --- a/services/clientlog/pkg/command/server.go +++ b/services/clientlog/pkg/command/server.go @@ -33,6 +33,10 @@ var _registeredEvents = []events.Unmarshaller{ events.FileLocked{}, events.FileUnlocked{}, events.FileTouched{}, + events.SpaceShared{}, + events.SpaceUnshared{}, + events.ShareCreated{}, + events.ShareRemoved{}, } // Server is the entrypoint for the server command. diff --git a/services/clientlog/pkg/service/service.go b/services/clientlog/pkg/service/service.go index 717104e75e..47fe6df688 100644 --- a/services/clientlog/pkg/service/service.go +++ b/services/clientlog/pkg/service/service.go @@ -8,6 +8,8 @@ import ( "reflect" gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" + group "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1" + user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" "go.opentelemetry.io/otel/trace" @@ -90,11 +92,6 @@ func (cl *ClientlogService) processEvent(event events.Event) { return } - gwc, err = cl.gatewaySelector.Next() - if err != nil { - cl.log.Error().Err(err).Interface("event", event).Msg("error getting gateway client") - return - } var ( users []string evType string @@ -160,6 +157,19 @@ func (cl *ClientlogService) processEvent(event events.Event) { p("file-unlocked", e.Ref) case events.FileTouched: p("file-touched", e.Ref) + case events.SpaceShared: + r, _ := storagespace.ParseReference(e.ID.GetOpaqueId()) + p("space-member-added", &r) + case events.SpaceUnshared: + r, _ := storagespace.ParseReference(e.ID.GetOpaqueId()) + p("space-member-removed", &r) + users, err = addSharees(ctx, users, gwc, e.GranteeUserID, e.GranteeGroupID) + case events.ShareCreated: + p("share-created", &provider.Reference{ResourceId: e.ItemID}) + users, err = addSharees(ctx, users, gwc, e.GranteeUserID, e.GranteeGroupID) + case events.ShareRemoved: + p("share-removed", &provider.Reference{ResourceId: e.ItemID}) + users, err = addSharees(ctx, users, gwc, e.GranteeUserID, e.GranteeGroupID) } if err != nil { @@ -204,3 +214,12 @@ func processFileEvent(ctx context.Context, ref *provider.Reference, gwc gateway. users, err := utils.GetSpaceMembers(ctx, info.GetSpace().GetId().GetOpaqueId(), gwc, utils.ViewerRole) return users, data, err } + +// adds userid to users slice or gets members of groupid and adds them to users slice +func addSharees(ctx context.Context, users []string, gwc gateway.GatewayAPIClient, uid *user.UserId, gid *group.GroupId) ([]string, error) { + if uid != nil { + return append(users, uid.GetOpaqueId()), nil + } + us, err := utils.GetGroupMembers(ctx, gid.GetOpaqueId(), gwc) + return append(users, us...), err +}