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  }