119 lines
3 KiB
Go
119 lines
3 KiB
Go
package csconfig
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"github.com/pkg/errors"
|
|
log "github.com/sirupsen/logrus"
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
/*top-level config : defaults,overriden by cfg file,overriden by cli*/
|
|
type Config struct {
|
|
//just a path to ourself :p
|
|
FilePath *string `yaml:"-"`
|
|
Self []byte `yaml:"-"`
|
|
Common *CommonCfg `yaml:"common,omitempty"`
|
|
Prometheus *PrometheusCfg `yaml:"prometheus,omitempty"`
|
|
Crowdsec *CrowdsecServiceCfg `yaml:"crowdsec_service,omitempty"`
|
|
Cscli *CscliCfg `yaml:"cscli,omitempty"`
|
|
DbConfig *DatabaseCfg `yaml:"db_config,omitempty"`
|
|
API *APICfg `yaml:"api,omitempty"`
|
|
ConfigPaths *ConfigurationPaths `yaml:"config_paths,omitempty"`
|
|
PluginConfig *PluginCfg `yaml:"plugin_config,omitempty"`
|
|
DisableAPI bool `yaml:"-"`
|
|
DisableAgent bool `yaml:"-"`
|
|
Hub *Hub `yaml:"-"`
|
|
}
|
|
|
|
func (c *Config) Dump() error {
|
|
out, err := yaml.Marshal(c)
|
|
if err != nil {
|
|
return errors.Wrap(err, "failed marshaling config")
|
|
}
|
|
fmt.Printf("%s", string(out))
|
|
return nil
|
|
}
|
|
|
|
func NewConfig(configFile string, disableAgent bool, disableAPI bool) (*Config, error) {
|
|
fcontent, err := ioutil.ReadFile(configFile)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "failed to read config file")
|
|
}
|
|
configData := os.ExpandEnv(string(fcontent))
|
|
cfg := Config{
|
|
FilePath: &configFile,
|
|
DisableAgent: disableAgent,
|
|
DisableAPI: disableAPI,
|
|
}
|
|
|
|
err = yaml.UnmarshalStrict([]byte(configData), &cfg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &cfg, nil
|
|
}
|
|
|
|
func NewDefaultConfig() *Config {
|
|
logLevel := log.InfoLevel
|
|
CommonCfg := CommonCfg{
|
|
Daemonize: false,
|
|
PidDir: "/tmp/",
|
|
LogMedia: "stdout",
|
|
//LogDir unneeded
|
|
LogLevel: &logLevel,
|
|
WorkingDir: ".",
|
|
}
|
|
prometheus := PrometheusCfg{
|
|
Enabled: true,
|
|
Level: "full",
|
|
}
|
|
configPaths := ConfigurationPaths{
|
|
ConfigDir: "/etc/crowdsec/",
|
|
DataDir: "/var/lib/crowdsec/data/",
|
|
SimulationFilePath: "/etc/crowdsec/config/simulation.yaml",
|
|
HubDir: "/etc/crowdsec/hub",
|
|
HubIndexFile: "/etc/crowdsec/hub/.index.json",
|
|
}
|
|
crowdsecCfg := CrowdsecServiceCfg{
|
|
AcquisitionFilePath: "/etc/crowdsec/config/acquis.yaml",
|
|
ParserRoutinesCount: 1,
|
|
}
|
|
|
|
cscliCfg := CscliCfg{
|
|
Output: "human",
|
|
}
|
|
|
|
apiCfg := APICfg{
|
|
Client: &LocalApiClientCfg{
|
|
CredentialsFilePath: "/etc/crowdsec/config/lapi-secrets.yaml",
|
|
},
|
|
Server: &LocalApiServerCfg{
|
|
ListenURI: "127.0.0.1:8080",
|
|
UseForwardedForHeaders: false,
|
|
OnlineClient: &OnlineApiClientCfg{
|
|
CredentialsFilePath: "/etc/crowdsec/config/online-api-secrets.yaml",
|
|
},
|
|
},
|
|
}
|
|
|
|
dbConfig := DatabaseCfg{
|
|
Type: "sqlite",
|
|
DbPath: "/var/lib/crowdsec/data/crowdsec.db",
|
|
}
|
|
|
|
globalCfg := Config{
|
|
Common: &CommonCfg,
|
|
Prometheus: &prometheus,
|
|
Crowdsec: &crowdsecCfg,
|
|
Cscli: &cscliCfg,
|
|
API: &apiCfg,
|
|
ConfigPaths: &configPaths,
|
|
DbConfig: &dbConfig,
|
|
}
|
|
|
|
return &globalCfg
|
|
}
|