From 9167bd107dcb8567d608d2155efd0b0f0d8cf791 Mon Sep 17 00:00:00 2001 From: mmetc <92726601+mmetc@users.noreply.github.com> Date: Thu, 25 May 2023 15:43:39 +0200 Subject: [PATCH] decouple bouncer dependencies: use go-cs-lib/pkg/ptr (#2228) --- cmd/crowdsec-cli/console.go | 11 ++++--- cmd/crowdsec-cli/decisions.go | 61 ++++++++++++++++++----------------- pkg/apiserver/apic.go | 51 +++++++++++++++-------------- 3 files changed, 63 insertions(+), 60 deletions(-) diff --git a/cmd/crowdsec-cli/console.go b/cmd/crowdsec-cli/console.go index f6c51a33e..83886267d 100644 --- a/cmd/crowdsec-cli/console.go +++ b/cmd/crowdsec-cli/console.go @@ -16,6 +16,7 @@ import ( "github.com/spf13/cobra" "gopkg.in/yaml.v3" + "github.com/crowdsecurity/go-cs-lib/pkg/ptr" "github.com/crowdsecurity/go-cs-lib/pkg/version" "github.com/crowdsecurity/crowdsec/pkg/apiclient" @@ -250,7 +251,7 @@ func SetConsoleOpts(args []string, wanted bool) { } } else { log.Infof("%s set to %t", csconfig.CONSOLE_MANAGEMENT, wanted) - csConfig.API.Server.ConsoleConfig.ConsoleManagement = types.BoolPtr(wanted) + csConfig.API.Server.ConsoleConfig.ConsoleManagement = ptr.Of(wanted) } if csConfig.API.Server.OnlineClient.Credentials != nil { changed := false @@ -284,7 +285,7 @@ func SetConsoleOpts(args []string, wanted bool) { } } else { log.Infof("%s set to %t", csconfig.SEND_CUSTOM_SCENARIOS, wanted) - csConfig.API.Server.ConsoleConfig.ShareCustomScenarios = types.BoolPtr(wanted) + csConfig.API.Server.ConsoleConfig.ShareCustomScenarios = ptr.Of(wanted) } case csconfig.SEND_TAINTED_SCENARIOS: /*for each flag check if it's already set before setting it*/ @@ -297,7 +298,7 @@ func SetConsoleOpts(args []string, wanted bool) { } } else { log.Infof("%s set to %t", csconfig.SEND_TAINTED_SCENARIOS, wanted) - csConfig.API.Server.ConsoleConfig.ShareTaintedScenarios = types.BoolPtr(wanted) + csConfig.API.Server.ConsoleConfig.ShareTaintedScenarios = ptr.Of(wanted) } case csconfig.SEND_MANUAL_SCENARIOS: /*for each flag check if it's already set before setting it*/ @@ -310,7 +311,7 @@ func SetConsoleOpts(args []string, wanted bool) { } } else { log.Infof("%s set to %t", csconfig.SEND_MANUAL_SCENARIOS, wanted) - csConfig.API.Server.ConsoleConfig.ShareManualDecisions = types.BoolPtr(wanted) + csConfig.API.Server.ConsoleConfig.ShareManualDecisions = ptr.Of(wanted) } case csconfig.SEND_CONTEXT: /*for each flag check if it's already set before setting it*/ @@ -323,7 +324,7 @@ func SetConsoleOpts(args []string, wanted bool) { } } else { log.Infof("%s set to %t", csconfig.SEND_CONTEXT, wanted) - csConfig.API.Server.ConsoleConfig.ShareContext = types.BoolPtr(wanted) + csConfig.API.Server.ConsoleConfig.ShareContext = ptr.Of(wanted) } default: log.Fatalf("unknown flag %s", arg) diff --git a/cmd/crowdsec-cli/decisions.go b/cmd/crowdsec-cli/decisions.go index e11c56ad3..f2f3efcf8 100644 --- a/cmd/crowdsec-cli/decisions.go +++ b/cmd/crowdsec-cli/decisions.go @@ -19,6 +19,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/cobra" + "github.com/crowdsecurity/go-cs-lib/pkg/ptr" "github.com/crowdsecurity/go-cs-lib/pkg/version" "github.com/crowdsecurity/crowdsec/pkg/apiclient" @@ -580,12 +581,12 @@ decisions.json : log.Debugf("'scope' line %d, using supplied value: '%s'", line, importScope) } decision := models.Decision{ - Value: types.StrPtr(decisionLine.Value), - Duration: types.StrPtr(decisionLine.Duration), - Origin: types.StrPtr(decisionLine.Origin), - Scenario: types.StrPtr(decisionLine.Scenario), - Type: types.StrPtr(decisionLine.Type), - Scope: types.StrPtr(decisionLine.Scope), + Value: ptr.Of(decisionLine.Value), + Duration: ptr.Of(decisionLine.Duration), + Origin: ptr.Of(decisionLine.Origin), + Scenario: ptr.Of(decisionLine.Scenario), + Type: ptr.Of(decisionLine.Type), + Scope: ptr.Of(decisionLine.Scope), Simulated: new(bool), } decisionsList = append(decisionsList, &decision) @@ -601,22 +602,22 @@ decisions.json : decisionBatch := decisionsList[i:end] importAlert := models.Alert{ CreatedAt: time.Now().UTC().Format(time.RFC3339), - Scenario: types.StrPtr(fmt.Sprintf("import %s : %d IPs", importFile, len(decisionBatch))), + Scenario: ptr.Of(fmt.Sprintf("import %s : %d IPs", importFile, len(decisionBatch))), - Message: types.StrPtr(""), + Message: ptr.Of(""), Events: []*models.Event{}, Source: &models.Source{ - Scope: types.StrPtr(""), - Value: types.StrPtr(""), + Scope: ptr.Of(""), + Value: ptr.Of(""), }, - StartAt: types.StrPtr(time.Now().UTC().Format(time.RFC3339)), - StopAt: types.StrPtr(time.Now().UTC().Format(time.RFC3339)), - Capacity: types.Int32Ptr(0), - Simulated: types.BoolPtr(false), - EventsCount: types.Int32Ptr(int32(len(decisionBatch))), - Leakspeed: types.StrPtr(""), - ScenarioHash: types.StrPtr(""), - ScenarioVersion: types.StrPtr(""), + StartAt: ptr.Of(time.Now().UTC().Format(time.RFC3339)), + StopAt: ptr.Of(time.Now().UTC().Format(time.RFC3339)), + Capacity: ptr.Of(int32(0)), + Simulated: ptr.Of(false), + EventsCount: ptr.Of(int32(len(decisionBatch))), + Leakspeed: ptr.Of(""), + ScenarioHash: ptr.Of(""), + ScenarioVersion: ptr.Of(""), Decisions: decisionBatch, } alerts = append(alerts, &importAlert) @@ -624,21 +625,21 @@ decisions.json : } else { importAlert := models.Alert{ CreatedAt: time.Now().UTC().Format(time.RFC3339), - Scenario: types.StrPtr(fmt.Sprintf("import %s : %d IPs", importFile, len(decisionsList))), - Message: types.StrPtr(""), + Scenario: ptr.Of(fmt.Sprintf("import %s : %d IPs", importFile, len(decisionsList))), + Message: ptr.Of(""), Events: []*models.Event{}, Source: &models.Source{ - Scope: types.StrPtr(""), - Value: types.StrPtr(""), + Scope: ptr.Of(""), + Value: ptr.Of(""), }, - StartAt: types.StrPtr(time.Now().UTC().Format(time.RFC3339)), - StopAt: types.StrPtr(time.Now().UTC().Format(time.RFC3339)), - Capacity: types.Int32Ptr(0), - Simulated: types.BoolPtr(false), - EventsCount: types.Int32Ptr(int32(len(decisionsList))), - Leakspeed: types.StrPtr(""), - ScenarioHash: types.StrPtr(""), - ScenarioVersion: types.StrPtr(""), + StartAt: ptr.Of(time.Now().UTC().Format(time.RFC3339)), + StopAt: ptr.Of(time.Now().UTC().Format(time.RFC3339)), + Capacity: ptr.Of(int32(0)), + Simulated: ptr.Of(false), + EventsCount: ptr.Of(int32(len(decisionsList))), + Leakspeed: ptr.Of(""), + ScenarioHash: ptr.Of(""), + ScenarioVersion: ptr.Of(""), Decisions: decisionsList, } alerts = append(alerts, &importAlert) diff --git a/pkg/apiserver/apic.go b/pkg/apiserver/apic.go index 11104221c..077b6451d 100644 --- a/pkg/apiserver/apic.go +++ b/pkg/apiserver/apic.go @@ -17,6 +17,7 @@ import ( log "github.com/sirupsen/logrus" "gopkg.in/tomb.v2" + "github.com/crowdsecurity/go-cs-lib/pkg/ptr" "github.com/crowdsecurity/go-cs-lib/pkg/trace" "github.com/crowdsecurity/go-cs-lib/pkg/version" @@ -96,15 +97,15 @@ func decisionsToApiDecisions(decisions []*models.Decision) models.AddSignalsRequ apiDecisions := models.AddSignalsRequestItemDecisions{} for _, decision := range decisions { x := &models.AddSignalsRequestItemDecisionsItem{ - Duration: types.StrPtr(*decision.Duration), + Duration: ptr.Of(*decision.Duration), ID: new(int64), - Origin: types.StrPtr(*decision.Origin), - Scenario: types.StrPtr(*decision.Scenario), - Scope: types.StrPtr(*decision.Scope), + Origin: ptr.Of(*decision.Origin), + Scenario: ptr.Of(*decision.Scenario), + Scope: ptr.Of(*decision.Scope), //Simulated: *decision.Simulated, - Type: types.StrPtr(*decision.Type), + Type: ptr.Of(*decision.Type), Until: decision.Until, - Value: types.StrPtr(*decision.Value), + Value: ptr.Of(*decision.Value), UUID: decision.UUID, } *x.ID = decision.ID @@ -429,7 +430,7 @@ func (a *apic) HandleDeletedDecisionsV3(deletedDecisions []*modelscapi.GetDecisi if err != nil { return 0, errors.Wrapf(err, "converting db ret %d", dbCliDel) } - updateCounterForDecision(delete_counters, types.StrPtr(types.CAPIOrigin), nil, dbCliDel) + updateCounterForDecision(delete_counters, ptr.Of(types.CAPIOrigin), nil, dbCliDel) nbDeleted += dbCliDel } } @@ -475,26 +476,26 @@ func createAlertsForDecisions(decisions []*models.Decision) []*models.Alert { func createAlertForDecision(decision *models.Decision) *models.Alert { newAlert := &models.Alert{} newAlert.Source = &models.Source{} - newAlert.Source.Scope = types.StrPtr("") + newAlert.Source.Scope = ptr.Of("") if *decision.Origin == types.CAPIOrigin { //to make things more user friendly, we replace CAPI with community-blocklist - newAlert.Scenario = types.StrPtr(types.CAPIOrigin) - newAlert.Source.Scope = types.StrPtr(types.CAPIOrigin) + newAlert.Scenario = ptr.Of(types.CAPIOrigin) + newAlert.Source.Scope = ptr.Of(types.CAPIOrigin) } else if *decision.Origin == types.ListOrigin { - newAlert.Scenario = types.StrPtr(*decision.Scenario) - newAlert.Source.Scope = types.StrPtr(types.ListOrigin) + newAlert.Scenario = ptr.Of(*decision.Scenario) + newAlert.Source.Scope = ptr.Of(types.ListOrigin) } else { log.Warningf("unknown origin %s", *decision.Origin) } - newAlert.Message = types.StrPtr("") - newAlert.Source.Value = types.StrPtr("") - newAlert.StartAt = types.StrPtr(time.Now().UTC().Format(time.RFC3339)) - newAlert.StopAt = types.StrPtr(time.Now().UTC().Format(time.RFC3339)) - newAlert.Capacity = types.Int32Ptr(0) - newAlert.Simulated = types.BoolPtr(false) - newAlert.EventsCount = types.Int32Ptr(0) - newAlert.Leakspeed = types.StrPtr("") - newAlert.ScenarioHash = types.StrPtr("") - newAlert.ScenarioVersion = types.StrPtr("") + newAlert.Message = ptr.Of("") + newAlert.Source.Value = ptr.Of("") + newAlert.StartAt = ptr.Of(time.Now().UTC().Format(time.RFC3339)) + newAlert.StopAt = ptr.Of(time.Now().UTC().Format(time.RFC3339)) + newAlert.Capacity = ptr.Of(int32(0)) + newAlert.Simulated = ptr.Of(false) + newAlert.EventsCount = ptr.Of(int32(0)) + newAlert.Leakspeed = ptr.Of("") + newAlert.ScenarioHash = ptr.Of("") + newAlert.ScenarioVersion = ptr.Of("") newAlert.MachineID = database.CapiMachineID return newAlert } @@ -771,10 +772,10 @@ func (a *apic) UpdateBlocklists(links *modelscapi.GetDecisionsStreamResponseLink func setAlertScenario(add_counters map[string]map[string]int, delete_counters map[string]map[string]int, alert *models.Alert) *models.Alert { if *alert.Source.Scope == types.CAPIOrigin { *alert.Source.Scope = SCOPE_CAPI_ALIAS_ALIAS - alert.Scenario = types.StrPtr(fmt.Sprintf("update : +%d/-%d IPs", add_counters[types.CAPIOrigin]["all"], delete_counters[types.CAPIOrigin]["all"])) + alert.Scenario = ptr.Of(fmt.Sprintf("update : +%d/-%d IPs", add_counters[types.CAPIOrigin]["all"], delete_counters[types.CAPIOrigin]["all"])) } else if *alert.Source.Scope == types.ListOrigin { *alert.Source.Scope = fmt.Sprintf("%s:%s", types.ListOrigin, *alert.Scenario) - alert.Scenario = types.StrPtr(fmt.Sprintf("update : +%d/-%d IPs", add_counters[types.ListOrigin][*alert.Scenario], delete_counters[types.ListOrigin][*alert.Scenario])) + alert.Scenario = ptr.Of(fmt.Sprintf("update : +%d/-%d IPs", add_counters[types.ListOrigin][*alert.Scenario], delete_counters[types.ListOrigin][*alert.Scenario])) } return alert } @@ -822,7 +823,7 @@ func (a *apic) Pull() error { func (a *apic) GetMetrics() (*models.Metrics, error) { metric := &models.Metrics{ - ApilVersion: types.StrPtr(version.String()), + ApilVersion: ptr.Of(version.String()), Machines: make([]*models.MetricsAgentInfo, 0), Bouncers: make([]*models.MetricsBouncerInfo, 0), }