69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package acmedns
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
func FileIsAccessible(fname string) bool {
|
|
_, err := os.Stat(fname)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
f, err := os.Open(fname)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
f.Close()
|
|
return true
|
|
}
|
|
|
|
func readTomlConfig(fname string) (AcmeDnsConfig, error) {
|
|
var conf AcmeDnsConfig
|
|
_, err := toml.DecodeFile(fname, &conf)
|
|
if err != nil {
|
|
// Return with config file parsing errors from toml package
|
|
return conf, err
|
|
}
|
|
return prepareConfig(conf)
|
|
}
|
|
|
|
// prepareConfig checks that mandatory values exist, and can be used to set default values in the future
|
|
func prepareConfig(conf AcmeDnsConfig) (AcmeDnsConfig, error) {
|
|
if conf.Database.Engine == "" {
|
|
return conf, errors.New("missing database configuration option \"engine\"")
|
|
}
|
|
if conf.Database.Connection == "" {
|
|
return conf, errors.New("missing database configuration option \"connection\"")
|
|
}
|
|
|
|
// Default values for options added to config to keep backwards compatibility with old config
|
|
if conf.API.ACMECacheDir == "" {
|
|
conf.API.ACMECacheDir = "api-certs"
|
|
}
|
|
|
|
return conf, nil
|
|
}
|
|
|
|
func ReadConfig(configFile string) (AcmeDnsConfig, string, error) {
|
|
var usedConfigFile string
|
|
var config AcmeDnsConfig
|
|
var err error
|
|
if FileIsAccessible(configFile) {
|
|
usedConfigFile = configFile
|
|
config, err = readTomlConfig(configFile)
|
|
} else if FileIsAccessible("./config.cfg") {
|
|
usedConfigFile = "./config.cfg"
|
|
config, err = readTomlConfig("./config.cfg")
|
|
} else {
|
|
err = fmt.Errorf("configuration file not found")
|
|
}
|
|
if err != nil {
|
|
err = fmt.Errorf("encountered an error while trying to read configuration file: %s\n", err)
|
|
}
|
|
return config, usedConfigFile, err
|
|
}
|