diff --git a/ee/server/service/service_teams.go b/ee/server/service/service_teams.go index 63d3e10b63..d88d9849d1 100644 --- a/ee/server/service/service_teams.go +++ b/ee/server/service/service_teams.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/fleetdm/fleet/v4/server" "github.com/fleetdm/fleet/v4/server/authz" @@ -203,6 +204,12 @@ func (svc *Service) DeleteTeam(ctx context.Context, teamID uint) error { return err } + team, err := svc.ds.Team(teamID) + if err != nil { + return err + } + name := team.Name + if err := svc.ds.DeleteTeam(teamID); err != nil { return err } @@ -210,7 +217,7 @@ func (svc *Service) DeleteTeam(ctx context.Context, teamID uint) error { return svc.ds.NewActivity( authz.UserFromContext(ctx), fleet.ActivityTypeDeletedTeam, - &map[string]interface{}{"team_id": teamID}, + &map[string]interface{}{"team_id": teamID, "team_name": name}, ) } diff --git a/server/datastore/mysql/activities.go b/server/datastore/mysql/activities.go index 43080d7f4c..91710581d8 100644 --- a/server/datastore/mysql/activities.go +++ b/server/datastore/mysql/activities.go @@ -29,7 +29,7 @@ func (d *Datastore) NewActivity(user *fleet.User, activityType string, details * // ListActivities returns a slice of activities performed across the organization func (d *Datastore) ListActivities(opt fleet.ListOptions) ([]*fleet.Activity, error) { activities := []*fleet.Activity{} - query := `SELECT a.id, a.user_id, a.created_at, a.activity_type, a.details, coalesce(u.name, a.user_name) as name, u.gravatar_url + query := `SELECT a.id, a.user_id, a.created_at, a.activity_type, a.details, coalesce(u.name, a.user_name) as name, u.gravatar_url, u.email FROM activities a LEFT JOIN users u ON (a.user_id=u.id) WHERE true` query = appendListOptionsToSQL(query, opt) diff --git a/server/datastore/mysql/activities_test.go b/server/datastore/mysql/activities_test.go index a8f2212926..e55b382dda 100644 --- a/server/datastore/mysql/activities_test.go +++ b/server/datastore/mysql/activities_test.go @@ -39,6 +39,7 @@ func TestActivityUsernameChange(t *testing.T) { assert.Len(t, activities, 2) assert.Equal(t, "newname", activities[0].ActorFullName) assert.Equal(t, "http://asd.com", *activities[0].ActorGravatar) + assert.Equal(t, "email@asd.com", *activities[0].ActorEmail) err = ds.DeleteUser(u.ID) require.NoError(t, err) diff --git a/server/fleet/activities.go b/server/fleet/activities.go index b0b6949669..d181daf750 100644 --- a/server/fleet/activities.go +++ b/server/fleet/activities.go @@ -47,6 +47,7 @@ type Activity struct { ActorFullName string `json:"actor_full_name" db:"name"` ActorID *uint `json:"actor_id" db:"user_id"` ActorGravatar *string `json:"actor_gravatar" db:"gravatar_url"` + ActorEmail *string `json:"actor_email" db:"email"` Type string `json:"type" db:"activity_type"` Details *json.RawMessage `json:"details" db:"details"` }