bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/pkg/csconfig/config.go (about) 1 package csconfig 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 8 "github.com/pkg/errors" 9 log "github.com/sirupsen/logrus" 10 "gopkg.in/yaml.v2" 11 ) 12 13 /*top-level config : defaults,overriden by cfg file,overriden by cli*/ 14 type Config struct { 15 //just a path to ourself :p 16 FilePath *string `yaml:"-"` 17 Self []byte `yaml:"-"` 18 Common *CommonCfg `yaml:"common,omitempty"` 19 Prometheus *PrometheusCfg `yaml:"prometheus,omitempty"` 20 Synsec *SynsecServiceCfg `yaml:"synsec_service,omitempty"` 21 Cscli *CscliCfg `yaml:"ccscli,omitempty"` 22 DbConfig *DatabaseCfg `yaml:"db_config,omitempty"` 23 API *APICfg `yaml:"api,omitempty"` 24 ConfigPaths *ConfigurationPaths `yaml:"config_paths,omitempty"` 25 DisableAPI bool `yaml:"-"` 26 DisableAgent bool `yaml:"-"` 27 Hub *Hub `yaml:"-"` 28 } 29 30 func (c *Config) Dump() error { 31 out, err := yaml.Marshal(c) 32 if err != nil { 33 return errors.Wrap(err, "failed marshaling config") 34 } 35 fmt.Printf("%s", string(out)) 36 return nil 37 } 38 39 func NewConfig(configFile string, disableAgent bool, disableAPI bool) (*Config, error) { 40 fcontent, err := ioutil.ReadFile(configFile) 41 if err != nil { 42 return nil, errors.Wrap(err, "failed to read config file") 43 } 44 configData := os.ExpandEnv(string(fcontent)) 45 cfg := Config{ 46 FilePath: &configFile, 47 DisableAgent: disableAgent, 48 DisableAPI: disableAPI, 49 } 50 51 err = yaml.UnmarshalStrict([]byte(configData), &cfg) 52 if err != nil { 53 return nil, err 54 } 55 return &cfg, nil 56 } 57 58 func NewDefaultConfig() *Config { 59 logLevel := log.InfoLevel 60 CommonCfg := CommonCfg{ 61 Daemonize: false, 62 PidDir: "/tmp/", 63 LogMedia: "stdout", 64 //LogDir unneeded 65 LogLevel: &logLevel, 66 WorkingDir: ".", 67 } 68 prometheus := PrometheusCfg{ 69 Enabled: true, 70 Level: "full", 71 } 72 configPaths := ConfigurationPaths{ 73 ConfigDir: "/etc/synsec/", 74 DataDir: "/var/lib/synsec/data/", 75 SimulationFilePath: "/etc/synsec/config/simulation.yaml", 76 HubDir: "/etc/synsec/hub", 77 HubIndexFile: "/etc/synsec/hub/.index.json", 78 } 79 synsecCfg := SynsecServiceCfg{ 80 AcquisitionFilePath: "/etc/synsec/config/acquis.yaml", 81 ParserRoutinesCount: 1, 82 } 83 84 ccscliCfg := CscliCfg{ 85 Output: "human", 86 } 87 88 apiCfg := APICfg{ 89 Client: &LocalApiClientCfg{ 90 CredentialsFilePath: "/etc/synsec/config/lapi-secrets.yaml", 91 }, 92 Server: &LocalApiServerCfg{ 93 ListenURI: "127.0.0.1:8080", 94 UseForwardedForHeaders: false, 95 OnlineClient: &OnlineApiClientCfg{ 96 CredentialsFilePath: "/etc/synsec/config/online-api-secrets.yaml", 97 }, 98 }, 99 } 100 101 dbConfig := DatabaseCfg{ 102 Type: "sqlite", 103 DbPath: "/var/lib/synsec/data/synsec.db", 104 } 105 106 globalCfg := Config{ 107 Common: &CommonCfg, 108 Prometheus: &prometheus, 109 Synsec: &synsecCfg, 110 Cscli: &ccscliCfg, 111 API: &apiCfg, 112 ConfigPaths: &configPaths, 113 DbConfig: &dbConfig, 114 } 115 116 return &globalCfg 117 }