You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
71 lines
1.8 KiB
package util
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var (
|
|
dataDirPath string
|
|
// DoNotSetConfigName is used to predefine if the name of the config should be set.
|
|
// Used for the unit testing
|
|
DoNotSetConfigName = false
|
|
)
|
|
|
|
// ReadInConfig loads the configuration and other needed folders for further usage
|
|
func ReadInConfig() error {
|
|
viper.AutomaticEnv()
|
|
viper.SetEnvPrefix("gus")
|
|
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
|
|
if !DoNotSetConfigName {
|
|
viper.SetConfigName("config")
|
|
}
|
|
viper.AddConfigPath(".")
|
|
setConfigDefaults()
|
|
switch err := viper.ReadInConfig(); err.(type) {
|
|
case viper.ConfigFileNotFoundError:
|
|
logrus.Info("No configuration file found, using defaults and environment overrides.")
|
|
break
|
|
case nil:
|
|
break
|
|
default:
|
|
return errors.Wrap(err, "could not read config file")
|
|
}
|
|
return checkForDatadir()
|
|
}
|
|
|
|
// setConfigDefaults sets the default values for the configuration
|
|
func setConfigDefaults() {
|
|
viper.SetDefault("listen_addr", ":8080")
|
|
viper.SetDefault("base_url", "http://localhost:3000")
|
|
|
|
viper.SetDefault("data_dir", "data")
|
|
viper.SetDefault("enable_debug_mode", true)
|
|
viper.SetDefault("shorted_id_length", 4)
|
|
}
|
|
|
|
// GetDataDir returns the absolute path of the data directory
|
|
func GetDataDir() string {
|
|
return dataDirPath
|
|
}
|
|
|
|
// checkForDatadir checks for the data dir and creates it if it not exists
|
|
func checkForDatadir() error {
|
|
var err error
|
|
dataDirPath, err = filepath.Abs(viper.GetString("data_dir"))
|
|
if err != nil {
|
|
return errors.Wrap(err, "could not get relative data dir path")
|
|
}
|
|
if _, err = os.Stat(dataDirPath); os.IsNotExist(err) {
|
|
if err = os.MkdirAll(dataDirPath, 0755); err != nil {
|
|
return errors.Wrap(err, "could not create config directory")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|