Add api_only key to activities API (#30353)

#28502
This commit is contained in:
Dante Catalfamo
2025-06-30 16:49:04 -04:00
committed by GitHub
parent 404f0d3ac0
commit 77f2a25fda
4 changed files with 14 additions and 1 deletions
+1
View File
@@ -0,0 +1 @@
- Added whether user is api_only to backend activity details
+10 -1
View File
@@ -214,7 +214,7 @@ func (ds *Datastore) ListActivities(ctx context.Context, opt fleet.ListActivitie
if len(lookup) != 0 {
usersQ := `
SELECT u.id, u.name, u.gravatar_url, u.email
SELECT u.id, u.name, u.gravatar_url, u.email, u.api_only
FROM users u
WHERE id IN (?)
`
@@ -233,6 +233,7 @@ func (ds *Datastore) ListActivities(ctx context.Context, opt fleet.ListActivitie
Name string `db:"name"`
GravatarUrl string `db:"gravatar_url"`
Email string `db:"email"`
APIOnly bool `db:"api_only"`
}
err = sqlx.SelectContext(ctx, ds.reader(ctx), &usersR, usersQ, usersArgs...)
@@ -249,11 +250,13 @@ func (ds *Datastore) ListActivities(ctx context.Context, opt fleet.ListActivitie
email := r.Email
gravatar := r.GravatarUrl
name := r.Name
apiOnly := r.APIOnly
for _, idx := range entries {
activities[idx].ActorEmail = &email
activities[idx].ActorGravatar = &gravatar
activities[idx].ActorFullName = &name
activities[idx].ActorAPIOnly = &apiOnly
}
}
}
@@ -314,6 +317,7 @@ func (ds *Datastore) ListHostUpcomingActivities(ctx context.Context, hostID uint
ua.execution_id as uuid,
IF(ua.fleet_initiated, 'Fleet', COALESCE(u.name, ua.payload->>'$.user.name')) as name,
u.id as user_id,
u.api_only as api_only,
COALESCE(u.gravatar_url, ua.payload->>'$.user.gravatar_url') as gravatar_url,
COALESCE(u.email, ua.payload->>'$.user.email') as user_email,
:ran_script_type as activity_type,
@@ -353,6 +357,7 @@ func (ds *Datastore) ListHostUpcomingActivities(ctx context.Context, hostID uint
ua.execution_id as uuid,
IF(ua.fleet_initiated, 'Fleet', COALESCE(u.name, ua.payload->>'$.user.name')) AS name,
ua.user_id as user_id,
u.api_only as api_only,
COALESCE(u.gravatar_url, ua.payload->>'$.user.gravatar_url') as gravatar_url,
COALESCE(u.email, ua.payload->>'$.user.email') as user_email,
:installed_software_type as activity_type,
@@ -394,6 +399,7 @@ func (ds *Datastore) ListHostUpcomingActivities(ctx context.Context, hostID uint
ua.execution_id as uuid,
IF(ua.fleet_initiated, 'Fleet', COALESCE(u.name, ua.payload->>'$.user.name')) AS name,
ua.user_id as user_id,
u.api_only as api_only,
COALESCE(u.gravatar_url, ua.payload->>'$.user.gravatar_url') as gravatar_url,
COALESCE(u.email, ua.payload->>'$.user.email') as user_email,
:uninstalled_software_type as activity_type,
@@ -433,6 +439,7 @@ func (ds *Datastore) ListHostUpcomingActivities(ctx context.Context, hostID uint
ua.execution_id AS uuid,
IF(ua.fleet_initiated, 'Fleet', COALESCE(u.name, ua.payload->>'$.user.name')) AS name,
u.id AS user_id,
u.api_only as api_only,
COALESCE(u.gravatar_url, ua.payload->>'$.user.gravatar_url') as gravatar_url,
COALESCE(u.email, ua.payload->>'$.user.email') as user_email,
:installed_app_store_app_type AS activity_type,
@@ -474,6 +481,7 @@ func (ds *Datastore) ListHostUpcomingActivities(ctx context.Context, hostID uint
user_id,
gravatar_url,
user_email,
api_only,
activity_type,
created_at,
details,
@@ -522,6 +530,7 @@ func (ds *Datastore) ListHostPastActivities(ctx context.Context, hostID uint, op
u.gravatar_url as gravatar_url,
a.created_at as created_at,
u.id as user_id,
u.api_only as api_only,
a.fleet_initiated as fleet_initiated
FROM
host_activities ha
@@ -87,6 +87,7 @@ func testActivityUsernameChange(t *testing.T, ds *Datastore) {
Name: "fullname",
Email: "email@asd.com",
GravatarURL: "http://asd.com",
APIOnly: true,
GlobalRole: ptr.String(fleet.RoleObserver),
}
_, err := ds.NewUser(context.Background(), u)
@@ -126,6 +127,7 @@ func testActivityUsernameChange(t *testing.T, ds *Datastore) {
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)
assert.Equal(t, true, *activities[0].ActorAPIOnly)
err = ds.DeleteUser(context.Background(), u.ID)
require.NoError(t, err)
+1
View File
@@ -30,6 +30,7 @@ type Activity struct {
ActorID *uint `json:"actor_id,omitempty" db:"user_id"`
ActorGravatar *string `json:"actor_gravatar,omitempty" db:"gravatar_url"`
ActorEmail *string `json:"actor_email,omitempty" db:"user_email"`
ActorAPIOnly *bool `json:"actor_api_only,omitempty" db:"api_only"`
Type string `json:"type" db:"activity_type"`
Details *json.RawMessage `json:"details" db:"details"`
Streamed *bool `json:"-" db:"streamed"`