56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
package csconfig
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"gopkg.in/yaml.v2"
|
|
|
|
"github.com/crowdsecurity/go-cs-lib/yamlpatch"
|
|
)
|
|
|
|
type SimulationConfig struct {
|
|
Simulation *bool `yaml:"simulation"`
|
|
Exclusions []string `yaml:"exclusions,omitempty"`
|
|
}
|
|
|
|
func (s *SimulationConfig) IsSimulated(scenario string) bool {
|
|
var simulated bool
|
|
|
|
if s.Simulation != nil && *s.Simulation {
|
|
simulated = true
|
|
}
|
|
for _, excluded := range s.Exclusions {
|
|
if excluded == scenario {
|
|
simulated = !simulated
|
|
break
|
|
}
|
|
}
|
|
return simulated
|
|
}
|
|
|
|
func (c *Config) LoadSimulation() error {
|
|
simCfg := SimulationConfig{}
|
|
if c.ConfigPaths.SimulationFilePath == "" {
|
|
c.ConfigPaths.SimulationFilePath = filepath.Clean(c.ConfigPaths.ConfigDir + "/simulation.yaml")
|
|
}
|
|
|
|
patcher := yamlpatch.NewPatcher(c.ConfigPaths.SimulationFilePath, ".local")
|
|
rcfg, err := patcher.MergedPatchContent()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := yaml.UnmarshalStrict(rcfg, &simCfg); err != nil {
|
|
return fmt.Errorf("while unmarshaling simulation file '%s' : %s", c.ConfigPaths.SimulationFilePath, err)
|
|
}
|
|
if simCfg.Simulation == nil {
|
|
simCfg.Simulation = new(bool)
|
|
}
|
|
if c.Crowdsec != nil {
|
|
c.Crowdsec.SimulationConfig = &simCfg
|
|
}
|
|
if c.Cscli != nil {
|
|
c.Cscli.SimulationConfig = &simCfg
|
|
}
|
|
return nil
|
|
}
|