diff --git a/server/service/queries.go b/server/service/queries.go index 415364f734..840f20e463 100644 --- a/server/service/queries.go +++ b/server/service/queries.go @@ -152,6 +152,10 @@ func (svc *Service) GetQueryReportResults(ctx context.Context, id uint) ([]fleet return nil, err } + if query.DiscardData { + return nil, nil + } + vc, ok := viewer.FromContext(ctx) if !ok { return nil, fleet.ErrNoContext diff --git a/server/service/queries_test.go b/server/service/queries_test.go index 95ed67d006..452c1df788 100644 --- a/server/service/queries_test.go +++ b/server/service/queries_test.go @@ -2,7 +2,9 @@ package service import ( "context" + "encoding/json" "testing" + "time" "github.com/fleetdm/fleet/v4/server/contexts/viewer" "github.com/fleetdm/fleet/v4/server/fleet" @@ -683,3 +685,32 @@ func TestQueryReportIsClipped(t *testing.T) { require.NoError(t, err) require.True(t, isClipped) } + +func TestQueryReportReturnsNilIfDiscardDataIsTrue(t *testing.T) { + ds := new(mock.Store) + svc, ctx := newTestService(t, ds, nil, nil) + viewerCtx := viewer.NewContext(ctx, viewer.Viewer{User: &fleet.User{ + ID: 1, + GlobalRole: ptr.String(fleet.RoleAdmin), + }}) + + ds.QueryFunc = func(ctx context.Context, queryID uint) (*fleet.Query, error) { + return &fleet.Query{ + DiscardData: true, + }, nil + } + ds.QueryResultRowsFunc = func(ctx context.Context, queryID uint, opts fleet.TeamFilter) ([]*fleet.ScheduledQueryResultRow, error) { + return []*fleet.ScheduledQueryResultRow{ + { + QueryID: 1, + HostID: 1, + Data: ptr.RawMessage(json.RawMessage(`{"foo": "bar"}`)), + LastFetched: time.Now(), + }, + }, nil + } + + results, err := svc.GetQueryReportResults(viewerCtx, 1) + require.NoError(t, err) + require.Nil(t, results) +}