diff --git a/config/config.go b/config/config.go index 02822f1..bbfd6d9 100644 --- a/config/config.go +++ b/config/config.go @@ -16,6 +16,7 @@ var ( } ) -func Load(configFilePath string) { - Config = loadConfFile(configFilePath) +func Load(configFilePath string) (*Configuration, error) { + Config, err := loadConfFile(configFilePath) + return &Config, err } diff --git a/config/toml.go b/config/toml.go index 6fcb28b..ce8914a 100644 --- a/config/toml.go +++ b/config/toml.go @@ -8,7 +8,7 @@ import ( "github.com/pelletier/go-toml/v2" ) -func loadConfFile(configFilePath string) Configuration { +func loadConfFile(configFilePath string) (Configuration, error) { bytes, err := ioutil.ReadFile(configFilePath) if err != nil { @@ -22,23 +22,23 @@ func loadConfFile(configFilePath string) Configuration { if err != nil { color.Errorln(err.Error()) color.Errorln("Configuration file " + configFilePath + " could not be read as TOML file") - panic(err) + return defaultConfig, err } color.Infoln("Loaded configuration file " + configFilePath) - return cfg + return cfg, err } -func createNewConfig(configFilePath string) Configuration { +func createNewConfig(configFilePath string) (Configuration, error) { confBytes, err := toml.Marshal(defaultConfig) if err != nil { color.Errorln(err.Error()) color.Errorln("Default config struct is not TOML conform") - panic(err) + return defaultConfig, err } err = os.WriteFile(configFilePath, confBytes, 0644) if err != nil { color.Errorln(err.Error()) color.Warnln("Using default config without file") } - return defaultConfig + return defaultConfig, err } diff --git a/main.go b/main.go index d0507d6..2671bd8 100644 --- a/main.go +++ b/main.go @@ -15,9 +15,12 @@ var ( func main() { flag.Parse() - config.Load(*configFile) + _, err := config.Load(*configFile) + if err != nil { + log.Fatalf("Failed to load configuration: %s\n ", err.Error()) + } - err := dns.Run() + err = dns.Run() if err != nil { log.Fatalf("Failed to start DNS server: %s\n ", err.Error()) }