diff --git a/changelog/unreleased/fix-acitivity-update-public-link.md b/changelog/unreleased/fix-acitivity-update-public-link.md new file mode 100644 index 0000000000..9245ad326e --- /dev/null +++ b/changelog/unreleased/fix-acitivity-update-public-link.md @@ -0,0 +1,6 @@ +Bugfix: Added LinkUpdated activity + +Added the LinkUpdated activity in the space context + +https://github.com/owncloud/ocis/pull/10085 +https://github.com/owncloud/ocis/issues/10012 diff --git a/services/activitylog/pkg/command/server.go b/services/activitylog/pkg/command/server.go index 232bc1aa1f..e2a92a3ec6 100644 --- a/services/activitylog/pkg/command/server.go +++ b/services/activitylog/pkg/command/server.go @@ -37,6 +37,7 @@ var _registeredEvents = []events.Unmarshaller{ events.ShareCreated{}, events.ShareRemoved{}, events.LinkCreated{}, + events.LinkUpdated{}, events.LinkRemoved{}, events.SpaceShared{}, events.SpaceUnshared{}, diff --git a/services/activitylog/pkg/service/http.go b/services/activitylog/pkg/service/http.go index deaebe9465..9ac38789bf 100644 --- a/services/activitylog/pkg/service/http.go +++ b/services/activitylog/pkg/service/http.go @@ -145,6 +145,16 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h message = MessageLinkCreated ts = utils.TSToTime(ev.CTime) vars, err = s.GetVars(ctx, WithResource(toRef(ev.ItemID), false), WithUser(ev.Executant, "")) + case events.LinkUpdated: + if ev.Sharer != nil && ev.ItemID != nil && ev.Sharer.GetOpaqueId() == ev.ItemID.GetSpaceId() { + continue + } + message = MessageLinkUpdated + ts = utils.TSToTime(ev.CTime) + vars, err = s.GetVars(ctx, + WithResource(toRef(ev.ItemID), false), + WithUser(ev.Executant, ""), + WithLinkFieldUpdated(&ev)) case events.LinkRemoved: message = MessageLinkDeleted ts = utils.TSToTime(ev.Timestamp) diff --git a/services/activitylog/pkg/service/response.go b/services/activitylog/pkg/service/response.go index c03dc9f169..f1756718a5 100644 --- a/services/activitylog/pkg/service/response.go +++ b/services/activitylog/pkg/service/response.go @@ -11,6 +11,7 @@ import ( 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" + "github.com/cs3org/reva/v2/pkg/events" "github.com/cs3org/reva/v2/pkg/storagespace" "github.com/cs3org/reva/v2/pkg/utils" libregraph "github.com/owncloud/libre-graph-api-go" @@ -27,6 +28,7 @@ var ( MessageShareCreated = l10n.Template("{user} shared {resource} with {sharee}") MessageShareDeleted = l10n.Template("{user} removed {sharee} from {resource}") MessageLinkCreated = l10n.Template("{user} shared {resource} via link") + MessageLinkUpdated = l10n.Template("{user} updated {field} for a link {token} on {resource}") MessageLinkDeleted = l10n.Template("{user} removed link to {resource}") MessageSpaceShared = l10n.Template("{user} added {sharee} as member of {space}") MessageSpaceUnshared = l10n.Template("{user} removed {sharee} from {space}") @@ -215,6 +217,33 @@ func WithSpace(spaceid *provider.StorageSpaceId) ActivityOption { } } +func WithLinkFieldUpdated(e *events.LinkUpdated) ActivityOption { + return func(_ context.Context, _ gateway.GatewayAPIClient, vars map[string]interface{}) error { + f := "some field" + switch e.FieldUpdated { + case "TYPE_PERMISSIONS": + f = "permission" + case "TYPE_PASSWORD": + f = "password" + case "TYPE_EXPIRATION": + f = "expiration date" + case "TYPE_DISPLAYNAME": + f = "display name" + case "TYPE_DESCRIPTION": + f = "description" + } + vars["field"] = Resource{ + ID: e.ItemID.GetOpaqueId(), + Name: f, + } + vars["token"] = Resource{ + ID: e.ItemID.GetOpaqueId(), + Name: e.Token, + } + return nil + } +} + // NewActivity creates a new activity func NewActivity(message string, ts time.Time, eventID string, vars map[string]interface{}) libregraph.Activity { return libregraph.Activity{ diff --git a/services/activitylog/pkg/service/service.go b/services/activitylog/pkg/service/service.go index bbfa6b6ad5..168a12ccd0 100644 --- a/services/activitylog/pkg/service/service.go +++ b/services/activitylog/pkg/service/service.go @@ -114,6 +114,10 @@ func (a *ActivitylogService) Run() { err = a.AddActivity(toRef(ev.ItemID), e.ID, ev.Timestamp) case events.LinkCreated: err = a.AddActivity(toRef(ev.ItemID), e.ID, utils.TSToTime(ev.CTime)) + case events.LinkUpdated: + if ev.Sharer != nil && ev.ItemID != nil && ev.Sharer.GetOpaqueId() != ev.ItemID.GetSpaceId() { + err = a.AddActivity(toRef(ev.ItemID), e.ID, utils.TSToTime(ev.CTime)) + } case events.LinkRemoved: err = a.AddActivity(toRef(ev.ItemID), e.ID, utils.TSToTime(ev.Timestamp)) case events.SpaceShared: