Skip to content

Commit 5c29d39

Browse files
[management] activity events on group updates (#4750)
1 parent 229e003 commit 5c29d39

File tree

2 files changed

+49
-9
lines changed

2 files changed

+49
-9
lines changed

management/server/group.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ func (am *DefaultAccountManager) UpdateGroup(ctx context.Context, accountID, use
138138
return err
139139
}
140140

141+
newGroup.AccountID = accountID
142+
143+
events := am.prepareGroupEvents(ctx, transaction, accountID, userID, newGroup)
144+
eventsToStore = append(eventsToStore, events...)
145+
141146
oldGroup, err := transaction.GetGroupByID(ctx, store.LockingStrengthNone, accountID, newGroup.ID)
142147
if err != nil {
143148
return status.Errorf(status.NotFound, "group with ID %s not found", newGroup.ID)
@@ -157,11 +162,6 @@ func (am *DefaultAccountManager) UpdateGroup(ctx context.Context, accountID, use
157162
}
158163
}
159164

160-
newGroup.AccountID = accountID
161-
162-
events := am.prepareGroupEvents(ctx, transaction, accountID, userID, newGroup)
163-
eventsToStore = append(eventsToStore, events...)
164-
165165
updateAccountPeers, err = areGroupChangesAffectPeers(ctx, transaction, accountID, []string{newGroup.ID})
166166
if err != nil {
167167
return err
@@ -335,6 +335,16 @@ func (am *DefaultAccountManager) prepareGroupEvents(ctx context.Context, transac
335335
if err == nil && oldGroup != nil {
336336
addedPeers = util.Difference(newGroup.Peers, oldGroup.Peers)
337337
removedPeers = util.Difference(oldGroup.Peers, newGroup.Peers)
338+
339+
if oldGroup.Name != newGroup.Name {
340+
eventsToStore = append(eventsToStore, func() {
341+
meta := map[string]any{
342+
"old_name": oldGroup.Name,
343+
"new_name": newGroup.Name,
344+
}
345+
am.StoreEvent(ctx, userID, newGroup.ID, accountID, activity.GroupUpdated, meta)
346+
})
347+
}
338348
} else {
339349
addedPeers = append(addedPeers, newGroup.Peers...)
340350
eventsToStore = append(eventsToStore, func() {

management/server/user.go

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ func (am *DefaultAccountManager) SaveOrAddUsers(ctx context.Context, accountID,
595595
}
596596

597597
// prepareUserUpdateEvents prepares a list user update events based on the changes between the old and new user data.
598-
func (am *DefaultAccountManager) prepareUserUpdateEvents(ctx context.Context, accountID string, initiatorUserID string, oldUser, newUser *types.User, transferredOwnerRole bool) []func() {
598+
func (am *DefaultAccountManager) prepareUserUpdateEvents(ctx context.Context, accountID string, initiatorUserID string, oldUser, newUser *types.User, transferredOwnerRole bool, removedGroupIDs, addedGroupIDs []string, tx store.Store) []func() {
599599
var eventsToStore []func()
600600

601601
if oldUser.IsBlocked() != newUser.IsBlocked() {
@@ -621,6 +621,35 @@ func (am *DefaultAccountManager) prepareUserUpdateEvents(ctx context.Context, ac
621621
})
622622
}
623623

624+
addedGroups, err := tx.GetGroupsByIDs(ctx, store.LockingStrengthNone, accountID, addedGroupIDs)
625+
if err != nil {
626+
log.WithContext(ctx).Errorf("failed to get added groups for user %s update event: %v", oldUser.Id, err)
627+
}
628+
629+
for _, group := range addedGroups {
630+
meta := map[string]any{
631+
"group": group.Name, "group_id": group.ID,
632+
"is_service_user": oldUser.IsServiceUser, "user_name": oldUser.ServiceUserName,
633+
}
634+
eventsToStore = append(eventsToStore, func() {
635+
am.StoreEvent(ctx, oldUser.Id, oldUser.Id, accountID, activity.GroupAddedToUser, meta)
636+
})
637+
}
638+
639+
removedGroups, err := tx.GetGroupsByIDs(ctx, store.LockingStrengthNone, accountID, removedGroupIDs)
640+
if err != nil {
641+
log.WithContext(ctx).Errorf("failed to get removed groups for user %s update event: %v", oldUser.Id, err)
642+
}
643+
for _, group := range removedGroups {
644+
meta := map[string]any{
645+
"group": group.Name, "group_id": group.ID,
646+
"is_service_user": oldUser.IsServiceUser, "user_name": oldUser.ServiceUserName,
647+
}
648+
eventsToStore = append(eventsToStore, func() {
649+
am.StoreEvent(ctx, oldUser.Id, oldUser.Id, accountID, activity.GroupRemovedFromUser, meta)
650+
})
651+
}
652+
624653
return eventsToStore
625654
}
626655

@@ -667,9 +696,10 @@ func (am *DefaultAccountManager) processUserUpdate(ctx context.Context, transact
667696
peersToExpire = userPeers
668697
}
669698

699+
var removedGroups, addedGroups []string
670700
if update.AutoGroups != nil && settings.GroupsPropagationEnabled {
671-
removedGroups := util.Difference(oldUser.AutoGroups, update.AutoGroups)
672-
addedGroups := util.Difference(update.AutoGroups, oldUser.AutoGroups)
701+
removedGroups = util.Difference(oldUser.AutoGroups, update.AutoGroups)
702+
addedGroups = util.Difference(update.AutoGroups, oldUser.AutoGroups)
673703
for _, peer := range userPeers {
674704
for _, groupID := range removedGroups {
675705
if err := transaction.RemovePeerFromGroup(ctx, peer.ID, groupID); err != nil {
@@ -685,7 +715,7 @@ func (am *DefaultAccountManager) processUserUpdate(ctx context.Context, transact
685715
}
686716

687717
updateAccountPeers := len(userPeers) > 0
688-
userEventsToAdd := am.prepareUserUpdateEvents(ctx, updatedUser.AccountID, initiatorUserId, oldUser, updatedUser, transferredOwnerRole)
718+
userEventsToAdd := am.prepareUserUpdateEvents(ctx, updatedUser.AccountID, initiatorUserId, oldUser, updatedUser, transferredOwnerRole, removedGroups, addedGroups, transaction)
689719

690720
return updateAccountPeers, updatedUser, peersToExpire, userEventsToAdd, nil
691721
}

0 commit comments

Comments
 (0)