up
This commit is contained in:
parent
58a9bb0bc0
commit
eb0b49cbbc
1 changed files with 155 additions and 0 deletions
155
pkg/config/crowdsec/config.go
Normal file
155
pkg/config/crowdsec/config.go
Normal file
|
@ -0,0 +1,155 @@
|
|||
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
|
||||
}
|
Loading…
Reference in a new issue