From e8e2ade8f099fbd9b6bcf352d131985eba986f19 Mon Sep 17 00:00:00 2001 From: mmetc <92726601+mmetc@users.noreply.github.com> Date: Wed, 16 Aug 2023 21:04:46 +0200 Subject: [PATCH] remove calls to log.Fatal (#2399) * remove log.Fatal from scenarios.go * remove log.Fatal from collections.go * remove log.Fatal from parsers.go and postoverflows.go --- cmd/crowdsec-cli/collections.go | 26 ++++--- cmd/crowdsec-cli/parsers.go | 47 +++++------ cmd/crowdsec-cli/postoverflows.go | 124 +++++++++++++++--------------- cmd/crowdsec-cli/scenarios.go | 26 ++++--- 4 files changed, 117 insertions(+), 106 deletions(-) diff --git a/cmd/crowdsec-cli/collections.go b/cmd/crowdsec-cli/collections.go index 3e24a5860..2affe1faa 100644 --- a/cmd/crowdsec-cli/collections.go +++ b/cmd/crowdsec-cli/collections.go @@ -21,19 +21,19 @@ func NewCollectionsCmd() *cobra.Command { DisableAutoGenTag: true, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { if err := csConfig.LoadHub(); err != nil { - log.Fatal(err) + return err } if csConfig.Hub == nil { return fmt.Errorf("you must configure cli before interacting with hub") } if err := cwhub.SetHubBranch(); err != nil { - return fmt.Errorf("error while setting hub branch: %s", err) + return fmt.Errorf("while setting hub branch: %w", err) } if err := cwhub.GetHubIdx(csConfig.Hub); err != nil { log.Info("Run 'sudo cscli hub update' to get the hub index") - log.Fatalf("Failed to get Hub index : %v", err) + return fmt.Errorf("failed to get hub index: %w", err) } return nil @@ -47,6 +47,7 @@ func NewCollectionsCmd() *cobra.Command { } var ignoreError bool + var cmdCollectionsInstall = &cobra.Command{ Use: "install collection", Short: "Install given collection(s)", @@ -57,7 +58,7 @@ func NewCollectionsCmd() *cobra.Command { return compAllItems(cwhub.COLLECTIONS, args, toComplete) }, DisableAutoGenTag: true, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { for _, name := range args { t := cwhub.GetItem(cwhub.COLLECTIONS, name) if t == nil { @@ -67,11 +68,12 @@ func NewCollectionsCmd() *cobra.Command { } if err := cwhub.InstallItem(csConfig, name, cwhub.COLLECTIONS, forceAction, downloadOnly); err != nil { if !ignoreError { - log.Fatalf("Error while installing '%s': %s", name, err) + return fmt.Errorf("error while installing '%s': %w", name, err) } log.Errorf("Error while installing '%s': %s", name, err) } } + return nil }, } cmdCollectionsInstall.PersistentFlags().BoolVarP(&downloadOnly, "download-only", "d", false, "Only download packages, don't enable") @@ -89,21 +91,21 @@ func NewCollectionsCmd() *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return compInstalledItems(cwhub.COLLECTIONS, args, toComplete) }, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { if all { cwhub.RemoveMany(csConfig, cwhub.COLLECTIONS, "", all, purge, forceAction) - return + return nil } if len(args) == 0 { - log.Fatal("Specify at least one collection to remove or '--all' flag.") + return fmt.Errorf("specify at least one collection to remove or '--all'") } for _, name := range args { if !forceAction { item := cwhub.GetItem(cwhub.COLLECTIONS, name) if item == nil { - log.Fatalf("unable to retrieve: %s\n", name) + return fmt.Errorf("unable to retrieve: %s", name) } if len(item.BelongsToCollections) > 0 { log.Warningf("%s belongs to other collections :\n%s\n", name, item.BelongsToCollections) @@ -113,6 +115,7 @@ func NewCollectionsCmd() *cobra.Command { } cwhub.RemoveMany(csConfig, cwhub.COLLECTIONS, name, all, purge, forceAction) } + return nil }, } cmdCollectionsRemove.PersistentFlags().BoolVar(&purge, "purge", false, "Delete source file too") @@ -129,17 +132,18 @@ func NewCollectionsCmd() *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return compInstalledItems(cwhub.COLLECTIONS, args, toComplete) }, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { if all { cwhub.UpgradeConfig(csConfig, cwhub.COLLECTIONS, "", forceAction) } else { if len(args) == 0 { - log.Fatalf("no target collection to upgrade") + return fmt.Errorf("specify at least one collection to upgrade or '--all'") } for _, name := range args { cwhub.UpgradeConfig(csConfig, cwhub.COLLECTIONS, name, forceAction) } } + return nil }, } cmdCollectionsUpgrade.PersistentFlags().BoolVarP(&all, "all", "a", false, "Upgrade all the collections") diff --git a/cmd/crowdsec-cli/parsers.go b/cmd/crowdsec-cli/parsers.go index 9b810238b..552dbf33d 100644 --- a/cmd/crowdsec-cli/parsers.go +++ b/cmd/crowdsec-cli/parsers.go @@ -10,7 +10,6 @@ import ( "github.com/crowdsecurity/crowdsec/pkg/cwhub" ) - func NewParsersCmd() *cobra.Command { var cmdParsers = &cobra.Command{ Use: "parsers [action] [config]", @@ -26,20 +25,21 @@ cscli parsers remove crowdsecurity/sshd-logs DisableAutoGenTag: true, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { if err := csConfig.LoadHub(); err != nil { - log.Fatal(err) + return err } if csConfig.Hub == nil { return fmt.Errorf("you must configure cli before interacting with hub") } if err := cwhub.SetHubBranch(); err != nil { - return fmt.Errorf("error while setting hub branch: %s", err) + return fmt.Errorf("while setting hub branch: %w", err) } if err := cwhub.GetHubIdx(csConfig.Hub); err != nil { log.Info("Run 'sudo cscli hub update' to get the hub index") - log.Fatalf("Failed to get Hub index : %v", err) + return fmt.Errorf("failed to get hub index: %w", err) } + return nil }, PersistentPostRun: func(cmd *cobra.Command, args []string) { @@ -59,7 +59,6 @@ cscli parsers remove crowdsecurity/sshd-logs return cmdParsers } - func NewParsersInstallCmd() *cobra.Command { var ignoreError bool @@ -73,7 +72,7 @@ func NewParsersInstallCmd() *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return compAllItems(cwhub.PARSERS, args, toComplete) }, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { for _, name := range args { t := cwhub.GetItem(cwhub.PARSERS, name) if t == nil { @@ -82,15 +81,16 @@ func NewParsersInstallCmd() *cobra.Command { continue } if err := cwhub.InstallItem(csConfig, name, cwhub.PARSERS, forceAction, downloadOnly); err != nil { - if ignoreError { - log.Errorf("Error while installing '%s': %s", name, err) - } else { - log.Fatalf("Error while installing '%s': %s", name, err) + if !ignoreError { + return fmt.Errorf("error while installing '%s': %w", name, err) } + log.Errorf("Error while installing '%s': %s", name, err) } } + return nil }, } + cmdParsersInstall.PersistentFlags().BoolVarP(&downloadOnly, "download-only", "d", false, "Only download packages, don't enable") cmdParsersInstall.PersistentFlags().BoolVar(&forceAction, "force", false, "Force install : Overwrite tainted and outdated files") cmdParsersInstall.PersistentFlags().BoolVar(&ignoreError, "ignore", false, "Ignore errors when installing multiple parsers") @@ -98,33 +98,35 @@ func NewParsersInstallCmd() *cobra.Command { return cmdParsersInstall } - func NewParsersRemoveCmd() *cobra.Command { - var cmdParsersRemove = &cobra.Command{ + cmdParsersRemove := &cobra.Command{ Use: "remove [config]", Short: "Remove given parser(s)", Long: `Remove given parse(s) from hub`, - Aliases: []string{"delete"}, Example: `cscli parsers remove crowdsec/xxx crowdsec/xyz`, + Aliases: []string{"delete"}, DisableAutoGenTag: true, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return compInstalledItems(cwhub.PARSERS, args, toComplete) }, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { if all { cwhub.RemoveMany(csConfig, cwhub.PARSERS, "", all, purge, forceAction) - return + return nil } if len(args) == 0 { - log.Fatalf("Specify at least one parser to remove or '--all' flag.") + return fmt.Errorf("specify at least one parser to remove or '--all'") } for _, name := range args { cwhub.RemoveMany(csConfig, cwhub.PARSERS, name, all, purge, forceAction) } + + return nil }, } + cmdParsersRemove.PersistentFlags().BoolVar(&purge, "purge", false, "Delete source file too") cmdParsersRemove.PersistentFlags().BoolVar(&forceAction, "force", false, "Force remove : Remove tainted and outdated files") cmdParsersRemove.PersistentFlags().BoolVar(&all, "all", false, "Delete all the parsers") @@ -132,9 +134,8 @@ func NewParsersRemoveCmd() *cobra.Command { return cmdParsersRemove } - func NewParsersUpgradeCmd() *cobra.Command { - var cmdParsersUpgrade = &cobra.Command{ + cmdParsersUpgrade := &cobra.Command{ Use: "upgrade [config]", Short: "Upgrade given parser(s)", Long: `Fetch and upgrade given parser(s) from hub`, @@ -143,26 +144,27 @@ func NewParsersUpgradeCmd() *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return compInstalledItems(cwhub.PARSERS, args, toComplete) }, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { if all { cwhub.UpgradeConfig(csConfig, cwhub.PARSERS, "", forceAction) } else { if len(args) == 0 { - log.Fatalf("no target parser to upgrade") + return fmt.Errorf("specify at least one parser to upgrade or '--all'") } for _, name := range args { cwhub.UpgradeConfig(csConfig, cwhub.PARSERS, name, forceAction) } } + return nil }, } + cmdParsersUpgrade.PersistentFlags().BoolVar(&all, "all", false, "Upgrade all the parsers") cmdParsersUpgrade.PersistentFlags().BoolVar(&forceAction, "force", false, "Force upgrade : Overwrite tainted and outdated files") return cmdParsersUpgrade } - func NewParsersInspectCmd() *cobra.Command { var cmdParsersInspect = &cobra.Command{ Use: "inspect [name]", @@ -178,12 +180,12 @@ func NewParsersInspectCmd() *cobra.Command { InspectItem(args[0], cwhub.PARSERS) }, } + cmdParsersInspect.PersistentFlags().StringVarP(&prometheusURL, "url", "u", "", "Prometheus url") return cmdParsersInspect } - func NewParsersListCmd() *cobra.Command { var cmdParsersList = &cobra.Command{ Use: "list [name]", @@ -196,6 +198,7 @@ cscli parser list crowdsecurity/xxx`, ListItems(color.Output, []string{cwhub.PARSERS}, args, false, true, all) }, } + cmdParsersList.PersistentFlags().BoolVarP(&all, "all", "a", false, "List disabled items as well") return cmdParsersList diff --git a/cmd/crowdsec-cli/postoverflows.go b/cmd/crowdsec-cli/postoverflows.go index 19cffccd2..df950cddc 100644 --- a/cmd/crowdsec-cli/postoverflows.go +++ b/cmd/crowdsec-cli/postoverflows.go @@ -10,6 +10,54 @@ import ( "github.com/crowdsecurity/crowdsec/pkg/cwhub" ) +func NewPostOverflowsCmd() *cobra.Command { + cmdPostOverflows := &cobra.Command{ + Use: "postoverflows [action] [config]", + Short: "Install/Remove/Upgrade/Inspect postoverflow(s) from hub", + Example: `cscli postoverflows install crowdsecurity/cdn-whitelist + cscli postoverflows inspect crowdsecurity/cdn-whitelist + cscli postoverflows upgrade crowdsecurity/cdn-whitelist + cscli postoverflows list + cscli postoverflows remove crowdsecurity/cdn-whitelist`, + Args: cobra.MinimumNArgs(1), + Aliases: []string{"postoverflow"}, + DisableAutoGenTag: true, + PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + if err := csConfig.LoadHub(); err != nil { + return err + } + if csConfig.Hub == nil { + return fmt.Errorf("you must configure cli before interacting with hub") + } + + if err := cwhub.SetHubBranch(); err != nil { + return fmt.Errorf("while setting hub branch: %w", err) + } + + if err := cwhub.GetHubIdx(csConfig.Hub); err != nil { + log.Info("Run 'sudo cscli hub update' to get the hub index") + return fmt.Errorf("failed to get hub index: %w", err) + } + + return nil + }, + PersistentPostRun: func(cmd *cobra.Command, args []string) { + if cmd.Name() == "inspect" || cmd.Name() == "list" { + return + } + log.Infof(ReloadMessage()) + }, + } + + cmdPostOverflows.AddCommand(NewPostOverflowsInstallCmd()) + cmdPostOverflows.AddCommand(NewPostOverflowsRemoveCmd()) + cmdPostOverflows.AddCommand(NewPostOverflowsUpgradeCmd()) + cmdPostOverflows.AddCommand(NewPostOverflowsInspectCmd()) + cmdPostOverflows.AddCommand(NewPostOverflowsListCmd()) + + return cmdPostOverflows +} + func NewPostOverflowsInstallCmd() *cobra.Command { var ignoreError bool @@ -23,7 +71,7 @@ func NewPostOverflowsInstallCmd() *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return compAllItems(cwhub.PARSERS_OVFLW, args, toComplete) }, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { for _, name := range args { t := cwhub.GetItem(cwhub.PARSERS_OVFLW, name) if t == nil { @@ -32,13 +80,13 @@ func NewPostOverflowsInstallCmd() *cobra.Command { continue } if err := cwhub.InstallItem(csConfig, name, cwhub.PARSERS_OVFLW, forceAction, downloadOnly); err != nil { - if ignoreError { - log.Errorf("Error while installing '%s': %s", name, err) - } else { - log.Fatalf("Error while installing '%s': %s", name, err) + if !ignoreError { + return fmt.Errorf("error while installing '%s': %w", name, err) } + log.Errorf("Error while installing '%s': %s", name, err) } } + return nil }, } @@ -55,24 +103,26 @@ func NewPostOverflowsRemoveCmd() *cobra.Command { Short: "Remove given postoverflow(s)", Long: `remove given postoverflow(s)`, Example: `cscli postoverflows remove crowdsec/xxx crowdsec/xyz`, - DisableAutoGenTag: true, Aliases: []string{"delete"}, + DisableAutoGenTag: true, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return compInstalledItems(cwhub.PARSERS_OVFLW, args, toComplete) }, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { if all { cwhub.RemoveMany(csConfig, cwhub.PARSERS_OVFLW, "", all, purge, forceAction) - return + return nil } if len(args) == 0 { - log.Fatalf("Specify at least one postoverflow to remove or '--all' flag.") + return fmt.Errorf("specify at least one postoverflow to remove or '--all'") } for _, name := range args { cwhub.RemoveMany(csConfig, cwhub.PARSERS_OVFLW, name, all, purge, forceAction) } + + return nil }, } @@ -93,17 +143,18 @@ func NewPostOverflowsUpgradeCmd() *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return compInstalledItems(cwhub.PARSERS_OVFLW, args, toComplete) }, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { if all { cwhub.UpgradeConfig(csConfig, cwhub.PARSERS_OVFLW, "", forceAction) } else { if len(args) == 0 { - log.Fatalf("no target postoverflow to upgrade") + return fmt.Errorf("specify at least one postoverflow to upgrade or '--all'") } for _, name := range args { cwhub.UpgradeConfig(csConfig, cwhub.PARSERS_OVFLW, name, forceAction) } } + return nil }, } @@ -120,10 +171,10 @@ func NewPostOverflowsInspectCmd() *cobra.Command { Long: `Inspect given postoverflow`, Example: `cscli postoverflows inspect crowdsec/xxx crowdsec/xyz`, DisableAutoGenTag: true, + Args: cobra.MinimumNArgs(1), ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return compInstalledItems(cwhub.PARSERS_OVFLW, args, toComplete) }, - Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { InspectItem(args[0], cwhub.PARSERS_OVFLW) }, @@ -149,52 +200,3 @@ cscli postoverflows list crowdsecurity/xxx`, return cmdPostOverflowsList } - - - -func NewPostOverflowsCmd() *cobra.Command { - cmdPostOverflows := &cobra.Command{ - Use: "postoverflows [action] [config]", - Short: "Install/Remove/Upgrade/Inspect postoverflow(s) from hub", - Example: `cscli postoverflows install crowdsecurity/cdn-whitelist - cscli postoverflows inspect crowdsecurity/cdn-whitelist - cscli postoverflows upgrade crowdsecurity/cdn-whitelist - cscli postoverflows list - cscli postoverflows remove crowdsecurity/cdn-whitelist`, - Args: cobra.MinimumNArgs(1), - Aliases: []string{"postoverflow"}, - DisableAutoGenTag: true, - PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - if err := csConfig.LoadHub(); err != nil { - log.Fatal(err) - } - if csConfig.Hub == nil { - return fmt.Errorf("you must configure cli before interacting with hub") - } - - if err := cwhub.SetHubBranch(); err != nil { - return fmt.Errorf("error while setting hub branch: %s", err) - } - - if err := cwhub.GetHubIdx(csConfig.Hub); err != nil { - log.Info("Run 'sudo cscli hub update' to get the hub index") - log.Fatalf("Failed to get Hub index : %v", err) - } - return nil - }, - PersistentPostRun: func(cmd *cobra.Command, args []string) { - if cmd.Name() == "inspect" || cmd.Name() == "list" { - return - } - log.Infof(ReloadMessage()) - }, - } - - cmdPostOverflows.AddCommand(NewPostOverflowsInstallCmd()) - cmdPostOverflows.AddCommand(NewPostOverflowsRemoveCmd()) - cmdPostOverflows.AddCommand(NewPostOverflowsUpgradeCmd()) - cmdPostOverflows.AddCommand(NewPostOverflowsInspectCmd()) - cmdPostOverflows.AddCommand(NewPostOverflowsListCmd()) - - return cmdPostOverflows -} diff --git a/cmd/crowdsec-cli/scenarios.go b/cmd/crowdsec-cli/scenarios.go index de52dcb48..3f2ac945e 100644 --- a/cmd/crowdsec-cli/scenarios.go +++ b/cmd/crowdsec-cli/scenarios.go @@ -25,7 +25,7 @@ cscli scenarios remove crowdsecurity/ssh-bf DisableAutoGenTag: true, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { if err := csConfig.LoadHub(); err != nil { - log.Fatal(err) + return err } if csConfig.Hub == nil { return fmt.Errorf("you must configure cli before interacting with hub") @@ -37,7 +37,7 @@ cscli scenarios remove crowdsecurity/ssh-bf if err := cwhub.GetHubIdx(csConfig.Hub); err != nil { log.Info("Run 'sudo cscli hub update' to get the hub index") - log.Fatalf("Failed to get Hub index : %v", err) + return fmt.Errorf("failed to get hub index: %w", err) } return nil @@ -72,7 +72,7 @@ func NewCmdScenariosInstall() *cobra.Command { return compAllItems(cwhub.SCENARIOS, args, toComplete) }, DisableAutoGenTag: true, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { for _, name := range args { t := cwhub.GetItem(cwhub.SCENARIOS, name) if t == nil { @@ -81,13 +81,13 @@ func NewCmdScenariosInstall() *cobra.Command { continue } if err := cwhub.InstallItem(csConfig, name, cwhub.SCENARIOS, forceAction, downloadOnly); err != nil { - if ignoreError { - log.Errorf("Error while installing '%s': %s", name, err) - } else { - log.Fatalf("Error while installing '%s': %s", name, err) + if !ignoreError { + return fmt.Errorf("error while installing '%s': %w", name, err) } + log.Errorf("Error while installing '%s': %s", name, err) } } + return nil }, } cmdScenariosInstall.PersistentFlags().BoolVarP(&downloadOnly, "download-only", "d", false, "Only download packages, don't enable") @@ -108,19 +108,20 @@ func NewCmdScenariosRemove() *cobra.Command { return compInstalledItems(cwhub.SCENARIOS, args, toComplete) }, DisableAutoGenTag: true, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { if all { cwhub.RemoveMany(csConfig, cwhub.SCENARIOS, "", all, purge, forceAction) - return + return nil } if len(args) == 0 { - log.Fatalf("Specify at least one scenario to remove or '--all' flag.") + return fmt.Errorf("specify at least one scenario to remove or '--all'") } for _, name := range args { cwhub.RemoveMany(csConfig, cwhub.SCENARIOS, name, all, purge, forceAction) } + return nil }, } cmdScenariosRemove.PersistentFlags().BoolVar(&purge, "purge", false, "Delete source file too") @@ -140,17 +141,18 @@ func NewCmdScenariosUpgrade() *cobra.Command { return compInstalledItems(cwhub.SCENARIOS, args, toComplete) }, DisableAutoGenTag: true, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { if all { cwhub.UpgradeConfig(csConfig, cwhub.SCENARIOS, "", forceAction) } else { if len(args) == 0 { - log.Fatalf("no target scenario to upgrade") + return fmt.Errorf("specify at least one scenario to upgrade or '--all'") } for _, name := range args { cwhub.UpgradeConfig(csConfig, cwhub.SCENARIOS, name, forceAction) } } + return nil }, } cmdScenariosUpgrade.PersistentFlags().BoolVarP(&all, "all", "a", false, "Upgrade all the scenarios")