From a9e5263a19debdd358e2bab09fbd499091fc9b14 Mon Sep 17 00:00:00 2001 From: William Petit Date: Mon, 27 Mar 2023 11:05:57 +0200 Subject: [PATCH] feat(cli,api): implements agent query filters flags --- internal/command/api/agent/query.go | 50 +++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/internal/command/api/agent/query.go b/internal/command/api/agent/query.go index 6f01ec5..5e1ffa0 100644 --- a/internal/command/api/agent/query.go +++ b/internal/command/api/agent/query.go @@ -6,6 +6,7 @@ import ( "forge.cadoles.com/Cadoles/emissary/internal/client" "forge.cadoles.com/Cadoles/emissary/internal/command/api/apierr" clientFlag "forge.cadoles.com/Cadoles/emissary/internal/command/api/flag" + "forge.cadoles.com/Cadoles/emissary/internal/datastore" "forge.cadoles.com/Cadoles/emissary/internal/format" "github.com/pkg/errors" "github.com/urfave/cli/v2" @@ -15,7 +16,21 @@ func QueryCommand() *cli.Command { return &cli.Command{ Name: "query", Usage: "Query agents", - Flags: clientFlag.ComposeFlags(), + Flags: clientFlag.ComposeFlags( + &cli.StringSliceFlag{ + Name: "thumbprints", + Usage: "use `THUMBPRINTS` as query filter", + Value: nil, + }, + &cli.Int64SliceFlag{ + Name: "statuses", + Usage: "use `STATUSES` as query filter", + }, + &cli.Int64SliceFlag{ + Name: "ids", + Usage: "use `IDS` as query filter", + }, + ), Action: func(ctx *cli.Context) error { baseFlags := clientFlag.GetBaseFlags(ctx) @@ -24,9 +39,40 @@ func QueryCommand() *cli.Command { return errors.WithStack(apierr.Wrap(err)) } + options := make([]client.QueryAgentsOptionFunc, 0) + + thumbprints := ctx.StringSlice("thumbprints") + if thumbprints != nil { + options = append(options, client.WithQueryAgentsThumbprints(thumbprints...)) + } + + rawIDs := ctx.Int64Slice("ids") + if rawIDs != nil { + agentIDs := func(ids []int64) []datastore.AgentID { + agentIDs := make([]datastore.AgentID, len(ids)) + for i, id := range ids { + agentIDs[i] = datastore.AgentID(id) + } + return agentIDs + }(rawIDs) + options = append(options, client.WithQueryAgentsID(agentIDs...)) + } + + rawStatuses := ctx.Int64Slice("statuses") + if rawStatuses != nil { + statuses := func(rawStatuses []int64) []datastore.AgentStatus { + statuses := make([]datastore.AgentStatus, len(rawStatuses)) + for i, status := range rawStatuses { + statuses[i] = datastore.AgentStatus(status) + } + return statuses + }(rawStatuses) + options = append(options, client.WithQueryAgentsStatus(statuses...)) + } + client := client.New(baseFlags.ServerURL, client.WithToken(token)) - agents, _, err := client.QueryAgents(ctx.Context) + agents, _, err := client.QueryAgents(ctx.Context, options...) if err != nil { return errors.WithStack(apierr.Wrap(err)) }