package config import ( "fmt" "os" "strings" "gitea.futuresens.co.uk/futuresens/hardlink/handlers" log "github.com/sirupsen/logrus" yaml "gopkg.in/yaml.v3" ) // configRec holds values from config.yml. type ConfigRec struct { Port int `yaml:"port"` LockserverUrl string `yaml:"lockservUrl"` LockType string `yaml:"lockType"` EncoderAddress string `yaml:"encoderAddr"` Cert string `yaml:"cert"` DispenserPort string `yaml:"dispensPort"` DispenserAdrr string `yaml:"dispensAddr"` PrinterName string `yaml:"printerName"` LogDir string `yaml:"logdir"` Dbport int `yaml:"dbport"` // Port for the database connection Dbname string `yaml:"dbname"` // Database name for the connection Dbuser string `yaml:"dbuser"` // User for the database connection Dbpassword string `yaml:"dbpassword"` // Password for the database connection IsPayment bool `yaml:"isPayment"` TestMode bool `yaml:"testMode"` } // ReadConfig reads config.yml and applies defaults. func ReadHardlinkConfig() ConfigRec { var cfg ConfigRec const configName = "config.yml" defaultPort := 9091 sep := string(os.PathSeparator) data, err := os.ReadFile(configName) if err != nil { log.Warnf("ReadConfig %s: %v", configName, err) } else if err := yaml.Unmarshal(data, &cfg); err != nil { log.Warnf("Unmarshal config: %v", err) } if cfg.Port == 0 { cfg.Port = defaultPort } if cfg.LockType == "" { err = fmt.Errorf("LockType is required in %s", configName) handlers.FatalError(err) } cfg.LockType = strings.ToLower(cfg.LockType) if cfg.LogDir == "" { cfg.LogDir = "./logs" + sep } else if !strings.HasSuffix(cfg.LogDir, sep) { cfg.LogDir += sep } if cfg.Dbport <= 0 || cfg.Dbuser == "" || cfg.Dbname == "" || cfg.Dbpassword == "" { err = fmt.Errorf("Database config (dbport, dbuser, dbname, dbpassword) are required in %s", configName) log.Warnf(err.Error()) } return cfg } func ReadPreauthReleaserConfig() ConfigRec { var cfg ConfigRec const configName = "config.yml" sep := string(os.PathSeparator) data, err := os.ReadFile(configName) if err != nil { log.Warnf("ReadConfig %s: %v", configName, err) } else if err := yaml.Unmarshal(data, &cfg); err != nil { log.Warnf("Unmarshal config: %v", err) } if cfg.Dbport <= 0 || cfg.Dbuser == "" || cfg.Dbname == "" || cfg.Dbpassword == "" { err = fmt.Errorf("Database config (dbport, dbuser, dbname, dbpassword) are required in %s", configName) handlers.FatalError(err) } if cfg.LogDir == "" { cfg.LogDir = "./logs" + sep } else if !strings.HasSuffix(cfg.LogDir, sep) { cfg.LogDir += sep } return cfg }