// Package config handles reading and parsing configuration from config.yml. package config import ( "fmt" "os" "strings" "gitea.futuresens.co.uk/futuresens/hardlink/internal/errorhandlers" 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"` Dbname string `yaml:"dbname"` Dbuser string `yaml:"dbuser"` Dbpassword string `yaml:"dbpassword"` CMSBaseURL string `yaml:"cmsurl"` IsPayment bool `yaml:"isPayment"` TestMode bool `yaml:"testMode"` Hotel string `yaml:"hotel"` Kiosk int `yaml:"kiosk"` SendErrorEmails []string `yaml:"senderroremails"` PaymentProvider string `yaml:"paymentProvider"` TimeoutSeconds int `yaml:"timeoutSeconds"` } // ReadHardlinkConfig reads config.yml and applies defaults. func ReadHardlinkConfig() ConfigRec { var cfg ConfigRec const configName = "config.yml" const 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 == "" { errorhandlers.FatalError(fmt.Errorf("LockType is required in %s", configName)) } 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 == "" { log.Warnf("Database config (dbport, dbuser, dbname, dbpassword) are required in %s", configName) } cfg.PaymentProvider = strings.ToLower(strings.TrimSpace(cfg.PaymentProvider)) if cfg.TimeoutSeconds <= 0 { cfg.TimeoutSeconds = 300 } 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 == "" { errorhandlers.FatalErrorWithMail(cfg.Hotel, cfg.Kiosk, "PreauthReleaser Database Configuration Error", fmt.Errorf("Database config (dbport, dbuser, dbname, dbpassword) are required in %s", configName)) } if cfg.LogDir == "" { cfg.LogDir = "./logs" + sep } else if !strings.HasSuffix(cfg.LogDir, sep) { cfg.LogDir += sep } return cfg }