diff --git a/services/userlog/pkg/service/conversion.go b/services/userlog/pkg/service/conversion.go index 74eda00e1..256d2e8da 100644 --- a/services/userlog/pkg/service/conversion.go +++ b/services/userlog/pkg/service/conversion.go @@ -54,27 +54,62 @@ func (ul *UserlogService) ConvertEvent(event *ehmsg.Event) (OC10Notification, er return OC10Notification{}, errors.New("unknown event type") // space related case events.SpaceDisabled: - return ul.spaceMessage(event.Id, SpaceDisabled, ev.Executant, ev.ID.GetOpaqueId()) + return ul.spaceMessage(event.Id, SpaceDisabled, ev.Executant, ev.ID.GetOpaqueId(), ev.Timestamp) case events.SpaceDeleted: - return ul.spaceMessage(event.Id, SpaceDeleted, ev.Executant, ev.ID.GetOpaqueId()) + return ul.spaceDeletedMessage(event.Id, ev.Executant, ev.ID.GetOpaqueId(), ev.SpaceName, ev.Timestamp) case events.SpaceShared: - return ul.spaceMessage(event.Id, SpaceShared, ev.Executant, ev.ID.GetOpaqueId()) + return ul.spaceMessage(event.Id, SpaceShared, ev.Executant, ev.ID.GetOpaqueId(), ev.Timestamp) case events.SpaceUnshared: - return ul.spaceMessage(event.Id, SpaceUnshared, ev.Executant, ev.ID.GetOpaqueId()) + return ul.spaceMessage(event.Id, SpaceUnshared, ev.Executant, ev.ID.GetOpaqueId(), ev.Timestamp) case events.SpaceMembershipExpired: - return ul.spaceMessage(event.Id, SpaceMembershipExpired, ev.SpaceOwner, ev.SpaceID.GetOpaqueId()) + return ul.spaceMessage(event.Id, SpaceMembershipExpired, ev.SpaceOwner, ev.SpaceID.GetOpaqueId(), ev.ExpiredAt) // share related case events.ShareCreated: - return ul.shareMessage(event.Id, ShareCreated, ev.Executant, ev.ItemID) + return ul.shareMessage(event.Id, ShareCreated, ev.Executant, ev.ItemID, utils.TSToTime(ev.CTime)) case events.ShareExpired: - return ul.shareMessage(event.Id, ShareExpired, ev.ShareOwner, ev.ItemID) + return ul.shareMessage(event.Id, ShareExpired, ev.ShareOwner, ev.ItemID, ev.ExpiredAt) case events.ShareRemoved: - return ul.shareMessage(event.Id, ShareRemoved, ev.Executant, nil) + return ul.shareMessage(event.Id, ShareRemoved, ev.Executant, ev.ItemID, ev.Timestamp) } } -func (ul *UserlogService) spaceMessage(eventid string, eventname string, executant *user.UserId, spaceid string) (OC10Notification, error) { +func (ul *UserlogService) spaceDeletedMessage(eventid string, executant *user.UserId, spaceid string, spacename string, ts time.Time) (OC10Notification, error) { + _, user, err := utils.Impersonate(executant, ul.gwClient, ul.cfg.MachineAuthAPIKey) + if err != nil { + return OC10Notification{}, err + } + + subj, subjraw, msg, msgraw, err := ul.composeMessage(SpaceDeleted, map[string]string{ + "username": user.GetDisplayName(), + "spacename": spacename, + }) + if err != nil { + return OC10Notification{}, err + } + + details := ul.getDetails(user, nil, nil) + details["space"] = map[string]string{ + "id": spaceid, + "name": spacename, + } + + return OC10Notification{ + EventID: eventid, + Service: ul.cfg.Service.Name, + UserName: user.GetUsername(), + Timestamp: ts.Format(time.RFC3339Nano), + ResourceID: spaceid, + ResourceType: _resourceTypeSpace, + Subject: subj, + SubjectRaw: subjraw, + Message: msg, + MessageRaw: msgraw, + MessageDetails: details, + }, nil +} + +func (ul *UserlogService) spaceMessage(eventid string, eventname string, executant *user.UserId, spaceid string, ts time.Time) (OC10Notification, error) { ctx, user, err := utils.Impersonate(executant, ul.gwClient, ul.cfg.MachineAuthAPIKey) if err != nil { return OC10Notification{}, err @@ -97,7 +132,7 @@ func (ul *UserlogService) spaceMessage(eventid string, eventname string, executa EventID: eventid, Service: ul.cfg.Service.Name, UserName: user.GetUsername(), - Timestamp: time.Now().Format(time.RFC3339Nano), + Timestamp: ts.Format(time.RFC3339Nano), ResourceID: spaceid, ResourceType: _resourceTypeSpace, Subject: subj, @@ -108,7 +143,7 @@ func (ul *UserlogService) spaceMessage(eventid string, eventname string, executa }, nil } -func (ul *UserlogService) shareMessage(eventid string, eventname string, executant *user.UserId, resourceid *storageprovider.ResourceId) (OC10Notification, error) { +func (ul *UserlogService) shareMessage(eventid string, eventname string, executant *user.UserId, resourceid *storageprovider.ResourceId, ts time.Time) (OC10Notification, error) { ctx, user, err := utils.Impersonate(executant, ul.gwClient, ul.cfg.MachineAuthAPIKey) if err != nil { return OC10Notification{}, err @@ -131,7 +166,7 @@ func (ul *UserlogService) shareMessage(eventid string, eventname string, executa EventID: eventid, Service: ul.cfg.Service.Name, UserName: user.GetUsername(), - Timestamp: time.Now().Format(time.RFC3339Nano), + Timestamp: ts.Format(time.RFC3339Nano), ResourceID: storagespace.FormatResourceID(*info.GetId()), ResourceType: _resourceTypeShare, Subject: subj, diff --git a/services/userlog/pkg/service/service.go b/services/userlog/pkg/service/service.go index 657a30659..a83b34c7e 100644 --- a/services/userlog/pkg/service/service.go +++ b/services/userlog/pkg/service/service.go @@ -91,8 +91,9 @@ func (ul *UserlogService) MemorizeEvents(ch <-chan events.Event) { case events.SpaceDisabled: users, err = ul.findSpaceMembers(ul.impersonate(e.Executant), e.ID.GetOpaqueId(), viewer) case events.SpaceDeleted: - // won't work - space is deleted - users, err = nil, errors.New("i do not know whom to inform") + for u, _ := range e.FinalMembers { + users = append(users, u) + } case events.SpaceShared: users, err = ul.resolveID(ul.impersonate(e.Executant), e.GranteeUserID, e.GranteeGroupID) case events.SpaceUnshared: @@ -104,7 +105,7 @@ func (ul *UserlogService) MemorizeEvents(ch <-chan events.Event) { case events.ShareCreated: users, err = ul.resolveID(ul.impersonate(e.Executant), e.GranteeUserID, e.GranteeGroupID) case events.ShareRemoved: - err = errors.New("no grantee in share removed event") + users, err = ul.resolveID(ul.impersonate(e.Executant), e.GranteeUserID, e.GranteeGroupID) case events.ShareExpired: users, err = ul.resolveID(ul.impersonate(e.ShareOwner), e.GranteeUserID, e.GranteeGroupID) }