From 16a3be49e26d0ba9c378461f5bf335224b38abbe Mon Sep 17 00:00:00 2001 From: blotus Date: Mon, 6 Mar 2023 15:38:58 +0100 Subject: [PATCH] do not try to load PAPI is url is not set (#2099) --- cmd/crowdsec-cli/console.go | 10 ++++----- cmd/crowdsec-cli/console_table.go | 2 +- pkg/apiserver/apiserver.go | 36 +++++++++++++++++-------------- pkg/apiserver/papi.go | 2 +- pkg/csconfig/api_test.go | 2 +- pkg/csconfig/console.go | 10 ++++----- 6 files changed, 33 insertions(+), 29 deletions(-) diff --git a/cmd/crowdsec-cli/console.go b/cmd/crowdsec-cli/console.go index b18e753e6..6bd4ef88b 100644 --- a/cmd/crowdsec-cli/console.go +++ b/cmd/crowdsec-cli/console.go @@ -215,7 +215,7 @@ Disable given information push to the central API.`, {csconfig.SEND_CUSTOM_SCENARIOS, fmt.Sprintf("%t", *csConfig.API.Server.ConsoleConfig.ShareCustomScenarios)}, {csconfig.SEND_TAINTED_SCENARIOS, fmt.Sprintf("%t", *csConfig.API.Server.ConsoleConfig.ShareTaintedScenarios)}, {csconfig.SEND_CONTEXT, fmt.Sprintf("%t", *csConfig.API.Server.ConsoleConfig.ShareContext)}, - {csconfig.CONSOLE_MANAGEMENT, fmt.Sprintf("%t", *csConfig.API.Server.ConsoleConfig.ReceiveDecisions)}, + {csconfig.CONSOLE_MANAGEMENT, fmt.Sprintf("%t", *csConfig.API.Server.ConsoleConfig.ConsoleManagement)}, } for _, row := range rows { err = csvwriter.Write(row) @@ -240,16 +240,16 @@ func SetConsoleOpts(args []string, wanted bool) { continue } /*for each flag check if it's already set before setting it*/ - if csConfig.API.Server.ConsoleConfig.ReceiveDecisions != nil { - if *csConfig.API.Server.ConsoleConfig.ReceiveDecisions == wanted { + if csConfig.API.Server.ConsoleConfig.ConsoleManagement != nil { + if *csConfig.API.Server.ConsoleConfig.ConsoleManagement == wanted { log.Debugf("%s already set to %t", csconfig.CONSOLE_MANAGEMENT, wanted) } else { log.Infof("%s set to %t", csconfig.CONSOLE_MANAGEMENT, wanted) - *csConfig.API.Server.ConsoleConfig.ReceiveDecisions = wanted + *csConfig.API.Server.ConsoleConfig.ConsoleManagement = wanted } } else { log.Infof("%s set to %t", csconfig.CONSOLE_MANAGEMENT, wanted) - csConfig.API.Server.ConsoleConfig.ReceiveDecisions = types.BoolPtr(wanted) + csConfig.API.Server.ConsoleConfig.ConsoleManagement = types.BoolPtr(wanted) } if csConfig.API.Server.OnlineClient.Credentials != nil { changed := false diff --git a/cmd/crowdsec-cli/console_table.go b/cmd/crowdsec-cli/console_table.go index 7c92a4534..f6778d625 100644 --- a/cmd/crowdsec-cli/console_table.go +++ b/cmd/crowdsec-cli/console_table.go @@ -49,7 +49,7 @@ func cmdConsoleStatusTable(out io.Writer, csConfig csconfig.Config) { t.AddRow(option, activated, "Send context with alerts to the console") case csconfig.CONSOLE_MANAGEMENT: activated := string(emoji.CrossMark) - if *csConfig.API.Server.ConsoleConfig.ReceiveDecisions { + if *csConfig.API.Server.ConsoleConfig.ConsoleManagement { activated = string(emoji.CheckMarkButton) } t.AddRow(option, activated, "Receive decisions from console") diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index 3ec15cf8e..bc244916a 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -356,23 +356,27 @@ func (s *APIServer) Run(apiReady chan bool) error { //csConfig.API.Server.ConsoleConfig.ShareCustomScenarios if s.isEnrolled { if fflag.PapiClient.IsEnabled() { - if s.consoleConfig.ReceiveDecisions != nil && *s.consoleConfig.ReceiveDecisions { - log.Infof("Starting PAPI decision receiver") - s.papi.pullTomb.Go(func() error { - if err := s.papi.Pull(); err != nil { - log.Errorf("papi pull: %s", err) - return err - } - return nil - }) + if s.consoleConfig.ConsoleManagement != nil && *s.consoleConfig.ConsoleManagement { + if s.papi.URL != "" { + log.Infof("Starting PAPI decision receiver") + s.papi.pullTomb.Go(func() error { + if err := s.papi.Pull(); err != nil { + log.Errorf("papi pull: %s", err) + return err + } + return nil + }) - s.papi.syncTomb.Go(func() error { - if err := s.papi.SyncDecisions(); err != nil { - log.Errorf("capi decisions sync: %s", err) - return err - } - return nil - }) + s.papi.syncTomb.Go(func() error { + if err := s.papi.SyncDecisions(); err != nil { + log.Errorf("capi decisions sync: %s", err) + return err + } + return nil + }) + } else { + log.Warnf("papi_url is not set in online_api_credentials.yaml, can't synchronize with the console. Run cscli console enable console_management to add it.") + } } else { log.Warningf("Machine is not allowed to synchronize decisions, you can enable it with `cscli console enable console_management`") } diff --git a/pkg/apiserver/papi.go b/pkg/apiserver/papi.go index fe8c531fe..581439240 100644 --- a/pkg/apiserver/papi.go +++ b/pkg/apiserver/papi.go @@ -293,7 +293,7 @@ func (p *Papi) SyncDecisions() error { go p.SendDeletedDecisions(&cacheCopy) } case deletedDecisions := <-p.Channels.DeleteDecisionChannel: - if (p.consoleConfig.ShareManualDecisions != nil && *p.consoleConfig.ShareManualDecisions) || (p.consoleConfig.ReceiveDecisions != nil && *p.consoleConfig.ReceiveDecisions) { + if (p.consoleConfig.ShareManualDecisions != nil && *p.consoleConfig.ShareManualDecisions) || (p.consoleConfig.ConsoleManagement != nil && *p.consoleConfig.ConsoleManagement) { var tmpDecisions []models.DecisionsDeleteRequestItem p.Logger.Debugf("%d decisions deletion to add in cache", len(deletedDecisions)) for _, decision := range deletedDecisions { diff --git a/pkg/csconfig/api_test.go b/pkg/csconfig/api_test.go index 0dea01345..802706dd7 100644 --- a/pkg/csconfig/api_test.go +++ b/pkg/csconfig/api_test.go @@ -202,7 +202,7 @@ func TestLoadAPIServer(t *testing.T) { ShareTaintedScenarios: types.BoolPtr(true), ShareCustomScenarios: types.BoolPtr(true), ShareContext: types.BoolPtr(false), - ReceiveDecisions: types.BoolPtr(false), + ConsoleManagement: types.BoolPtr(false), }, LogDir: LogDirFullPath, LogMedia: "stdout", diff --git a/pkg/csconfig/console.go b/pkg/csconfig/console.go index c58c89a31..18d175365 100644 --- a/pkg/csconfig/console.go +++ b/pkg/csconfig/console.go @@ -27,7 +27,7 @@ type ConsoleConfig struct { ShareManualDecisions *bool `yaml:"share_manual_decisions"` ShareTaintedScenarios *bool `yaml:"share_tainted"` ShareCustomScenarios *bool `yaml:"share_custom"` - ReceiveDecisions *bool `yaml:"console_management"` + ConsoleManagement *bool `yaml:"console_management"` ShareContext *bool `yaml:"share_context"` } @@ -38,7 +38,7 @@ func (c *LocalApiServerCfg) LoadConsoleConfig() error { c.ConsoleConfig.ShareCustomScenarios = types.BoolPtr(true) c.ConsoleConfig.ShareTaintedScenarios = types.BoolPtr(true) c.ConsoleConfig.ShareManualDecisions = types.BoolPtr(false) - c.ConsoleConfig.ReceiveDecisions = types.BoolPtr(false) + c.ConsoleConfig.ConsoleManagement = types.BoolPtr(false) c.ConsoleConfig.ShareContext = types.BoolPtr(false) return nil } @@ -66,10 +66,10 @@ func (c *LocalApiServerCfg) LoadConsoleConfig() error { } if !fflag.PapiClient.IsEnabled() { - c.ConsoleConfig.ReceiveDecisions = types.BoolPtr(false) - } else if c.ConsoleConfig.ReceiveDecisions == nil { + c.ConsoleConfig.ConsoleManagement = types.BoolPtr(false) + } else if c.ConsoleConfig.ConsoleManagement == nil { log.Debugf("no console_management found, setting to false") - c.ConsoleConfig.ReceiveDecisions = types.BoolPtr(false) + c.ConsoleConfig.ConsoleManagement = types.BoolPtr(false) } if c.ConsoleConfig.ShareContext == nil {