From b603bdfccc03a600b3aaf20197710fbebf09d8fa Mon Sep 17 00:00:00 2001 From: Marco Mariani Date: Fri, 6 Jan 2023 23:14:02 +0100 Subject: [PATCH] cscli refact: extracted New.*Cmd from alerts, capi, dashboard; removed (some) globals --- cmd/crowdsec-cli/alerts.go | 35 +++++++++++++++++++++++++---------- cmd/crowdsec-cli/bouncers.go | 1 - cmd/crowdsec-cli/capi.go | 27 ++++++++++++++++++++------- cmd/crowdsec-cli/dashboard.go | 35 +++++++++++++++++++++++++++++------ cmd/crowdsec-cli/metrics.go | 1 - 5 files changed, 74 insertions(+), 25 deletions(-) diff --git a/cmd/crowdsec-cli/alerts.go b/cmd/crowdsec-cli/alerts.go index c3f5862a8..eda15a1f7 100644 --- a/cmd/crowdsec-cli/alerts.go +++ b/cmd/crowdsec-cli/alerts.go @@ -24,8 +24,6 @@ import ( "github.com/crowdsecurity/crowdsec/pkg/models" ) -var printMachine bool -var limit *int func DecisionsFromAlert(alert *models.Alert) string { ret := "" @@ -146,8 +144,8 @@ func DisplayOneAlert(alert *models.Alert, withDetail bool) error { return nil } + func NewAlertsCmd() *cobra.Command { - /* ---- ALERTS COMMAND */ var cmdAlerts = &cobra.Command{ Use: "alerts [action]", Short: "Manage alerts", @@ -177,6 +175,16 @@ func NewAlertsCmd() *cobra.Command { }, } + cmdAlerts.AddCommand(NewAlertsListCmd()) + cmdAlerts.AddCommand(NewAlertsInspectCmd()) + cmdAlerts.AddCommand(NewAlertsFlushCmd()) + cmdAlerts.AddCommand(NewAlertsDeleteCmd()) + + return cmdAlerts +} + + +func NewAlertsListCmd() *cobra.Command { var alertListFilter = apiclient.AlertsListOpts{ ScopeEquals: new(string), ValueEquals: new(string), @@ -188,8 +196,9 @@ func NewAlertsCmd() *cobra.Command { TypeEquals: new(string), IncludeCAPI: new(bool), } - limit = new(int) + var limit = new(int) contained := new(bool) + var printMachine bool var cmdAlertsList = &cobra.Command{ Use: "list [filters]", Short: "List alerts", @@ -285,11 +294,15 @@ cscli alerts list --type ban`, cmdAlertsList.Flags().BoolVar(contained, "contained", false, "query decisions contained by range") cmdAlertsList.Flags().BoolVarP(&printMachine, "machine", "m", false, "print machines that sent alerts") cmdAlertsList.Flags().IntVarP(limit, "limit", "l", 50, "limit size of alerts list table (0 to view all alerts)") - cmdAlerts.AddCommand(cmdAlertsList) + return cmdAlertsList +} + +func NewAlertsDeleteCmd() *cobra.Command { var ActiveDecision *bool var AlertDeleteAll bool var delAlertByID string + contained := new(bool) var alertDeleteFilter = apiclient.AlertsDeleteOpts{ ScopeEquals: new(string), ValueEquals: new(string), @@ -380,9 +393,11 @@ cscli alerts delete -s crowdsecurity/ssh-bf"`, cmdAlertsDelete.Flags().StringVar(&delAlertByID, "id", "", "alert ID") cmdAlertsDelete.Flags().BoolVarP(&AlertDeleteAll, "all", "a", false, "delete all alerts") cmdAlertsDelete.Flags().BoolVar(contained, "contained", false, "query decisions contained by range") + return cmdAlertsDelete +} - cmdAlerts.AddCommand(cmdAlertsDelete) +func NewAlertsInspectCmd() *cobra.Command { var details bool var cmdAlertsInspect = &cobra.Command{ Use: `inspect "alert_id"`, @@ -428,8 +443,10 @@ cscli alerts delete -s crowdsecurity/ssh-bf"`, cmdAlertsInspect.Flags().SortFlags = false cmdAlertsInspect.Flags().BoolVarP(&details, "details", "d", false, "show alerts with events") - cmdAlerts.AddCommand(cmdAlertsInspect) + return cmdAlertsInspect +} +func NewAlertsFlushCmd() *cobra.Command { var maxItems int var maxAge string var cmdAlertsFlush = &cobra.Command{ @@ -460,7 +477,5 @@ cscli alerts delete -s crowdsecurity/ssh-bf"`, cmdAlertsFlush.Flags().IntVar(&maxItems, "max-items", 5000, "Maximum number of alert items to keep in the database") cmdAlertsFlush.Flags().StringVar(&maxAge, "max-age", "7d", "Maximum age of alert items to keep in the database") - cmdAlerts.AddCommand(cmdAlertsFlush) - - return cmdAlerts + return cmdAlertsFlush } diff --git a/cmd/crowdsec-cli/bouncers.go b/cmd/crowdsec-cli/bouncers.go index 025fa11b7..d16000119 100644 --- a/cmd/crowdsec-cli/bouncers.go +++ b/cmd/crowdsec-cli/bouncers.go @@ -191,7 +191,6 @@ func NewBouncersDeleteCmd() *cobra.Command { } func NewBouncersCmd() *cobra.Command { - /* ---- DECISIONS COMMAND */ var cmdBouncers = &cobra.Command{ Use: "bouncers [action]", Short: "Manage bouncers [requires local API]", diff --git a/cmd/crowdsec-cli/capi.go b/cmd/crowdsec-cli/capi.go index 648d79cf4..2e06959dc 100644 --- a/cmd/crowdsec-cli/capi.go +++ b/cmd/crowdsec-cli/capi.go @@ -19,10 +19,9 @@ import ( "github.com/crowdsecurity/crowdsec/pkg/models" ) -var CAPIURLPrefix string = "v2" -var CAPIBaseURL string = "https://api.crowdsec.net/" -var capiUserPrefix string -var outputFile string +const CAPIBaseURL string = "https://api.crowdsec.net/" +const CAPIURLPrefix = "v2" + func NewCapiCmd() *cobra.Command { var cmdCapi = &cobra.Command{ @@ -42,6 +41,17 @@ func NewCapiCmd() *cobra.Command { }, } + cmdCapi.AddCommand(NewCapiRegisterCmd()) + cmdCapi.AddCommand(NewCapiStatusCmd()) + + return cmdCapi +} + + +func NewCapiRegisterCmd() *cobra.Command { + var capiUserPrefix string + var outputFile string + var cmdCapiRegister = &cobra.Command{ Use: "register", Short: "Register to Central API (CAPI)", @@ -107,8 +117,12 @@ func NewCapiCmd() *cobra.Command { if err := cmdCapiRegister.Flags().MarkHidden("schmilblick"); err != nil { log.Fatalf("failed to hide flag: %s", err) } - cmdCapi.AddCommand(cmdCapiRegister) + return cmdCapiRegister +} + + +func NewCapiStatusCmd() *cobra.Command { var cmdCapiStatus = &cobra.Command{ Use: "status", Short: "Check status with the Central API (CAPI)", @@ -167,7 +181,6 @@ func NewCapiCmd() *cobra.Command { log.Infof("You can successfully interact with Central API (CAPI)") }, } - cmdCapi.AddCommand(cmdCapiStatus) - return cmdCapi + return cmdCapiStatus } diff --git a/cmd/crowdsec-cli/dashboard.go b/cmd/crowdsec-cli/dashboard.go index 5bd74e240..28448c6c8 100644 --- a/cmd/crowdsec-cli/dashboard.go +++ b/cmd/crowdsec-cli/dashboard.go @@ -87,7 +87,19 @@ cscli dashboard remove }, } + cmdDashboard.AddCommand(NewDashboardSetupCmd()) + cmdDashboard.AddCommand(NewDashboardStartCmd()) + cmdDashboard.AddCommand(NewDashboardStopCmd()) + cmdDashboard.AddCommand(NewDashboardShowPasswordCmd()) + cmdDashboard.AddCommand(NewDashboardRemoveCmd()) + + return cmdDashboard +} + + +func NewDashboardSetupCmd() *cobra.Command { var force bool + var cmdDashSetup = &cobra.Command{ Use: "setup", Short: "Setup a metabase container.", @@ -192,8 +204,10 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --password //cmdDashSetup.Flags().StringVarP(&metabaseUser, "user", "u", "crowdsec@crowdsec.net", "metabase user") cmdDashSetup.Flags().StringVar(&metabasePassword, "password", "", "metabase password") - cmdDashboard.AddCommand(cmdDashSetup) + return cmdDashSetup +} +func NewDashboardStartCmd() *cobra.Command { var cmdDashStart = &cobra.Command{ Use: "start", Short: "Start the metabase container.", @@ -212,8 +226,10 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --password log.Infof("url : http://%s:%s", metabaseListenAddress, metabaseListenPort) }, } - cmdDashboard.AddCommand(cmdDashStart) + return cmdDashStart +} +func NewDashboardStopCmd() *cobra.Command { var cmdDashStop = &cobra.Command{ Use: "stop", Short: "Stops the metabase container.", @@ -226,8 +242,11 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --password } }, } - cmdDashboard.AddCommand(cmdDashStop) + return cmdDashStop +} + +func NewDashboardShowPasswordCmd() *cobra.Command { var cmdDashShowPassword = &cobra.Command{Use: "show-password", Short: "displays password of metabase.", Args: cobra.ExactArgs(0), @@ -240,7 +259,12 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --password log.Printf("'%s'", m.Config.Password) }, } - cmdDashboard.AddCommand(cmdDashShowPassword) + return cmdDashShowPassword +} + + +func NewDashboardRemoveCmd() *cobra.Command { + var force bool var cmdDashRemove = &cobra.Command{ Use: "remove", @@ -303,9 +327,8 @@ cscli dashboard remove --force } cmdDashRemove.Flags().BoolVarP(&force, "force", "f", false, "Remove also the metabase image") cmdDashRemove.Flags().BoolVarP(&forceYes, "yes", "y", false, "force yes") - cmdDashboard.AddCommand(cmdDashRemove) - return cmdDashboard + return cmdDashRemove } func passwordIsValid(password string) bool { diff --git a/cmd/crowdsec-cli/metrics.go b/cmd/crowdsec-cli/metrics.go index aae1fe1fb..03592a9f7 100644 --- a/cmd/crowdsec-cli/metrics.go +++ b/cmd/crowdsec-cli/metrics.go @@ -263,7 +263,6 @@ func FormatPrometheusMetrics(out io.Writer, url string, formatType string) error var noUnit bool func NewMetricsCmd() *cobra.Command { - /* ---- UPDATE COMMAND */ var cmdMetrics = &cobra.Command{ Use: "metrics", Short: "Display crowdsec prometheus metrics.",