|
@@ -1,155 +0,0 @@
|
|
-package config
|
|
|
|
-
|
|
|
|
-import (
|
|
|
|
- "flag"
|
|
|
|
- "fmt"
|
|
|
|
- "io/ioutil"
|
|
|
|
- "path/filepath"
|
|
|
|
-
|
|
|
|
- "os"
|
|
|
|
-
|
|
|
|
- "github.com/crowdsecurity/crowdsec/pkg/cwversion"
|
|
|
|
- "github.com/crowdsecurity/crowdsec/pkg/outputs"
|
|
|
|
-
|
|
|
|
- log "github.com/sirupsen/logrus"
|
|
|
|
- "gopkg.in/yaml.v2"
|
|
|
|
-)
|
|
|
|
-
|
|
|
|
-// Crowdwatch is the structure of the crowdsec configuration
|
|
|
|
-type Crowdwatch struct {
|
|
|
|
- WorkingFolder string `yaml:"working_dir,omitempty"`
|
|
|
|
- DataFolder string `yaml:"data_dir,omitempty"`
|
|
|
|
- ConfigFolder string `yaml:"config_dir,omitempty"`
|
|
|
|
- AcquisitionFile string `yaml:"acquis_path,omitempty"`
|
|
|
|
- SingleFile string //for forensic mode
|
|
|
|
- SingleFileLabel string //for forensic mode
|
|
|
|
- PIDFolder string `yaml:"pid_dir,omitempty"`
|
|
|
|
- LogFolder string `yaml:"log_dir,omitempty"`
|
|
|
|
- LogMode string `yaml:"log_mode,omitempty"` //like file, syslog or stdout ?
|
|
|
|
- LogLevel log.Level `yaml:"log_level,omitempty"` //trace,debug,info,warning,error
|
|
|
|
- Daemonize bool `yaml:"daemon,omitempty"` //true -> go background
|
|
|
|
- Profiling bool `yaml:"profiling,omitempty"` //true -> enable runtime profiling
|
|
|
|
- SQLiteFile string `yaml:"sqlite_path,omitempty"` //path to sqlite output
|
|
|
|
- APIMode bool `yaml:"apimode,omitempty"` //true -> enable api push
|
|
|
|
- Linter bool
|
|
|
|
- Prometheus bool
|
|
|
|
- HTTPListen string `yaml:"http_listen,omitempty"`
|
|
|
|
- ValidatorMode string /*if present points to a specific config (for tests)*/
|
|
|
|
- RestoreMode string
|
|
|
|
- DumpBuckets bool
|
|
|
|
- OutputConfig *outputs.OutputFactory `yaml:"plugin"`
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// NewCrowdwatchConfig create a new crowdsec configuration with default configuration
|
|
|
|
-func NewCrowdwatchConfig() *Crowdwatch {
|
|
|
|
- return &Crowdwatch{
|
|
|
|
- LogLevel: log.InfoLevel,
|
|
|
|
- Daemonize: false,
|
|
|
|
- Profiling: false,
|
|
|
|
- WorkingFolder: "./",
|
|
|
|
- DataFolder: "./data/",
|
|
|
|
- ConfigFolder: "./config/",
|
|
|
|
- PIDFolder: "./",
|
|
|
|
- LogFolder: "./",
|
|
|
|
- LogMode: "stdout",
|
|
|
|
- SQLiteFile: "./test.db",
|
|
|
|
- APIMode: false,
|
|
|
|
- Prometheus: false,
|
|
|
|
- HTTPListen: "127.0.0.1:6060",
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// GetOPT return flags parsed from command line
|
|
|
|
-func (c *Crowdwatch) GetOPT() error {
|
|
|
|
-
|
|
|
|
- AcquisitionFile := flag.String("acquis", "", "path to acquis.yaml")
|
|
|
|
- configFile := flag.String("c", "", "configuration file")
|
|
|
|
- printTrace := flag.Bool("trace", false, "VERY verbose")
|
|
|
|
- printDebug := flag.Bool("debug", false, "print debug-level on stdout")
|
|
|
|
- printInfo := flag.Bool("info", false, "print info-level on stdout")
|
|
|
|
- printVersion := flag.Bool("version", false, "display version")
|
|
|
|
- APIMode := flag.Bool("api", false, "perform pushes to api")
|
|
|
|
- SQLiteMode := flag.Bool("sqlite", true, "write overflows to sqlite")
|
|
|
|
- profileMode := flag.Bool("profile", false, "Enable performance profiling")
|
|
|
|
- catFile := flag.String("file", "", "Process a single file in time-machine")
|
|
|
|
- catFileType := flag.String("type", "", "Labels.type for file in time-machine")
|
|
|
|
- daemonMode := flag.Bool("daemon", false, "Daemonize, go background, drop PID file, log to file")
|
|
|
|
- testMode := flag.Bool("t", false, "only test configs")
|
|
|
|
- prometheus := flag.Bool("prometheus-metrics", false, "expose http prometheus collector (see http_listen)")
|
|
|
|
- validatorMode := flag.String("custom-config", "", "[dev] run a specific subset of configs parser:file.yaml,scenarios:file.yaml")
|
|
|
|
- restoreMode := flag.String("restore-state", "", "[dev] restore buckets state from json file")
|
|
|
|
- dumpMode := flag.Bool("dump-state", false, "[dev] Dump bucket state at the end of run.")
|
|
|
|
-
|
|
|
|
- flag.Parse()
|
|
|
|
-
|
|
|
|
- if *printVersion == true {
|
|
|
|
- cwversion.Show()
|
|
|
|
- os.Exit(0)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if *catFile != "" {
|
|
|
|
- if *catFileType == "" {
|
|
|
|
- log.Fatalf("-file requires -type")
|
|
|
|
- }
|
|
|
|
- c.SingleFile = *catFile
|
|
|
|
- c.SingleFileLabel = *catFileType
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /*overriden by cfg file*/
|
|
|
|
- if *configFile != "" {
|
|
|
|
- rcfg, err := ioutil.ReadFile(*configFile)
|
|
|
|
- if err != nil {
|
|
|
|
- return fmt.Errorf("read '%s' : %s", *configFile, err)
|
|
|
|
- }
|
|
|
|
- if err := yaml.UnmarshalStrict(rcfg, c); err != nil {
|
|
|
|
- return fmt.Errorf("parse '%s' : %s", *configFile, err)
|
|
|
|
- }
|
|
|
|
- if c.AcquisitionFile == "" {
|
|
|
|
- c.AcquisitionFile = filepath.Clean(c.ConfigFolder + "/acquis.yaml")
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if *AcquisitionFile != "" {
|
|
|
|
- c.AcquisitionFile = *AcquisitionFile
|
|
|
|
- }
|
|
|
|
- if *dumpMode == true {
|
|
|
|
- c.DumpBuckets = true
|
|
|
|
- }
|
|
|
|
- if *prometheus {
|
|
|
|
- c.Prometheus = true
|
|
|
|
- }
|
|
|
|
- if *testMode {
|
|
|
|
- c.Linter = true
|
|
|
|
- }
|
|
|
|
- if *validatorMode != "" {
|
|
|
|
- c.ValidatorMode = *validatorMode
|
|
|
|
- }
|
|
|
|
- /*overriden by cmdline*/
|
|
|
|
- if *daemonMode {
|
|
|
|
- c.Daemonize = true
|
|
|
|
- }
|
|
|
|
- if *profileMode {
|
|
|
|
- c.Profiling = true
|
|
|
|
- }
|
|
|
|
- if *printDebug {
|
|
|
|
- c.LogLevel = log.DebugLevel
|
|
|
|
- }
|
|
|
|
- if *printInfo {
|
|
|
|
- c.LogLevel = log.InfoLevel
|
|
|
|
- }
|
|
|
|
- if *printTrace {
|
|
|
|
- c.LogLevel = log.TraceLevel
|
|
|
|
- }
|
|
|
|
- if !*SQLiteMode {
|
|
|
|
- c.SQLiteFile = ""
|
|
|
|
- }
|
|
|
|
- if *APIMode {
|
|
|
|
- c.APIMode = true
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if *restoreMode != "" {
|
|
|
|
- c.RestoreMode = *restoreMode
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return nil
|
|
|
|
-}
|
|
|