diff --git a/server/datastore/mysql/activities.go b/server/datastore/mysql/activities.go index 0013140cea..43080d7f4c 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 + 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 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 ccd2b388ad..a8f2212926 100644 --- a/server/datastore/mysql/activities_test.go +++ b/server/datastore/mysql/activities_test.go @@ -14,10 +14,11 @@ func TestActivityUsernameChange(t *testing.T) { defer ds.Close() u := &fleet.User{ - Password: []byte("asd"), - Name: "fullname", - Email: "email@asd.com", - GlobalRole: ptr.String(fleet.RoleObserver), + Password: []byte("asd"), + Name: "fullname", + Email: "email@asd.com", + GravatarURL: "http://asd.com", + GlobalRole: ptr.String(fleet.RoleObserver), } _, err := ds.NewUser(u) require.Nil(t, err) @@ -37,6 +38,7 @@ func TestActivityUsernameChange(t *testing.T) { require.NoError(t, err) assert.Len(t, activities, 2) assert.Equal(t, "newname", activities[0].ActorFullName) + assert.Equal(t, "http://asd.com", *activities[0].ActorGravatar) err = ds.DeleteUser(u.ID) require.NoError(t, err) @@ -45,6 +47,7 @@ func TestActivityUsernameChange(t *testing.T) { require.NoError(t, err) assert.Len(t, activities, 2) assert.Equal(t, "fullname", activities[0].ActorFullName) + assert.Nil(t, activities[0].ActorGravatar) } func TestNewActivity(t *testing.T) { diff --git a/server/fleet/activities.go b/server/fleet/activities.go index a481e65d89..b0b6949669 100644 --- a/server/fleet/activities.go +++ b/server/fleet/activities.go @@ -46,6 +46,7 @@ type Activity struct { ID uint `json:"id" db:"id"` ActorFullName string `json:"actor_full_name" db:"name"` ActorID *uint `json:"actor_id" db:"user_id"` + ActorGravatar *string `json:"actor_gravatar" db:"gravatar_url"` Type string `json:"type" db:"activity_type"` Details *json.RawMessage `json:"details" db:"details"` } diff --git a/server/service/integration_test.go b/server/service/integration_test.go index ea754a13e0..dc44ae5762 100644 --- a/server/service/integration_test.go +++ b/server/service/integration_test.go @@ -180,9 +180,14 @@ func TestQueryCreationLogsActivity(t *testing.T) { ds := mysql.CreateMySQLDS(t) defer ds.Close() - _, server := RunServerForTestsWithDS(t, ds) + users, server := RunServerForTestsWithDS(t, ds) token := getTestAdminToken(t, server) + admin1 := users["admin1@example.com"] + admin1.GravatarURL = "http://iii.com" + err := ds.SaveUser(&admin1) + require.NoError(t, err) + params := fleet.QueryPayload{ Name: ptr.String("user1"), Query: ptr.String("select * from time;"), @@ -196,6 +201,7 @@ func TestQueryCreationLogsActivity(t *testing.T) { assert.Len(t, activities.Activities, 1) assert.Equal(t, "Test Name admin1@example.com", activities.Activities[0]["actor_full_name"]) + assert.Equal(t, "http://iii.com", activities.Activities[0]["actor_gravatar"]) assert.Equal(t, "created_saved_query", activities.Activities[0]["type"]) }