mirror of
https://github.com/crowdsecurity/crowdsec.git
synced 2025-05-11 04:15:54 +02:00
* cscsli: remove unused Command.Args setting * cscli: review/update argument number checking cscli will consistently print the help text if the number of arguments is wrong for the command, but not for other types of errors. * fix func tests * lint
100 lines
2.5 KiB
Go
100 lines
2.5 KiB
Go
package clibouncer
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/fatih/color"
|
|
"github.com/jedib0t/go-pretty/v6/table"
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/crowdsecurity/crowdsec/cmd/crowdsec-cli/args"
|
|
"github.com/crowdsecurity/crowdsec/cmd/crowdsec-cli/clientinfo"
|
|
"github.com/crowdsecurity/crowdsec/cmd/crowdsec-cli/cstable"
|
|
"github.com/crowdsecurity/crowdsec/pkg/database/ent"
|
|
"github.com/crowdsecurity/crowdsec/pkg/database/ent/bouncer"
|
|
)
|
|
|
|
func (cli *cliBouncers) inspectHuman(out io.Writer, bouncer *ent.Bouncer) {
|
|
t := cstable.NewLight(out, cli.cfg().Cscli.Color).Writer
|
|
|
|
t.SetTitle("Bouncer: " + bouncer.Name)
|
|
|
|
t.SetColumnConfigs([]table.ColumnConfig{
|
|
{Number: 1, AutoMerge: true},
|
|
})
|
|
|
|
lastPull := ""
|
|
if bouncer.LastPull != nil {
|
|
lastPull = bouncer.LastPull.String()
|
|
}
|
|
|
|
t.AppendRows([]table.Row{
|
|
{"Created At", bouncer.CreatedAt},
|
|
{"Last Update", bouncer.UpdatedAt},
|
|
{"Revoked?", bouncer.Revoked},
|
|
{"IP Address", bouncer.IPAddress},
|
|
{"Type", bouncer.Type},
|
|
{"Version", bouncer.Version},
|
|
{"Last Pull", lastPull},
|
|
{"Auth type", bouncer.AuthType},
|
|
{"OS", clientinfo.GetOSNameAndVersion(bouncer)},
|
|
{"Auto Created", bouncer.AutoCreated},
|
|
})
|
|
|
|
for _, ff := range clientinfo.GetFeatureFlagList(bouncer) {
|
|
t.AppendRow(table.Row{"Feature Flags", ff})
|
|
}
|
|
|
|
fmt.Fprint(out, t.Render())
|
|
}
|
|
|
|
func (cli *cliBouncers) inspect(bouncer *ent.Bouncer) error {
|
|
out := color.Output
|
|
outputFormat := cli.cfg().Cscli.Output
|
|
|
|
switch outputFormat {
|
|
case "human":
|
|
cli.inspectHuman(out, bouncer)
|
|
case "json":
|
|
enc := json.NewEncoder(out)
|
|
enc.SetIndent("", " ")
|
|
|
|
if err := enc.Encode(newBouncerInfo(bouncer)); err != nil {
|
|
return errors.New("failed to serialize")
|
|
}
|
|
|
|
return nil
|
|
default:
|
|
return fmt.Errorf("output format '%s' not supported for this command", outputFormat)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (cli *cliBouncers) newInspectCmd() *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "inspect [bouncer_name]",
|
|
Short: "inspect a bouncer by name",
|
|
Example: `cscli bouncers inspect "bouncer1"`,
|
|
Args: args.ExactArgs(1),
|
|
DisableAutoGenTag: true,
|
|
ValidArgsFunction: cli.validBouncerID,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
bouncerName := args[0]
|
|
|
|
b, err := cli.db.Ent.Bouncer.Query().
|
|
Where(bouncer.Name(bouncerName)).
|
|
Only(cmd.Context())
|
|
if err != nil {
|
|
return fmt.Errorf("unable to read bouncer data '%s': %w", bouncerName, err)
|
|
}
|
|
|
|
return cli.inspect(b)
|
|
},
|
|
}
|
|
|
|
return cmd
|
|
}
|