75 lines
1.3 KiB
Go
75 lines
1.3 KiB
Go
package config
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// AppConfig represents the config flags for the base application.
|
|
type AppConfig struct {
|
|
Environment string
|
|
Port string
|
|
}
|
|
|
|
// DBConfig is the config for the DB connection.
|
|
type DBConfig struct {
|
|
Type string
|
|
Host string
|
|
Port string
|
|
User string
|
|
Password string
|
|
Database string
|
|
}
|
|
|
|
// Conf represents the overall configuration of the application.
|
|
type Conf struct {
|
|
App AppConfig
|
|
Db DBConfig
|
|
}
|
|
|
|
func createDefaultConf() *Conf {
|
|
cnf := &Conf{
|
|
App: AppConfig{
|
|
Environment: "local",
|
|
Port: "8080",
|
|
},
|
|
Db: DBConfig{
|
|
Type: "postgres",
|
|
Host: "localhost",
|
|
Port: "5432",
|
|
User: "<user>",
|
|
Password: "<password>",
|
|
Database: "gogmagog",
|
|
},
|
|
}
|
|
|
|
return cnf
|
|
}
|
|
|
|
// GetConf returns config values
|
|
func GetConf(filename string) *Conf {
|
|
|
|
cnf := createDefaultConf()
|
|
|
|
vv := viper.New()
|
|
vv.SetConfigName(filename)
|
|
vv.SetConfigType("yaml")
|
|
vv.AddConfigPath(".")
|
|
log.Printf("Initialising config with filename %s", filename)
|
|
|
|
err := vv.ReadInConfig()
|
|
if err != nil {
|
|
log.Fatal("Could not load config file: \n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
err = vv.Unmarshal(&cnf)
|
|
if err != nil {
|
|
log.Fatal("Could not read config file into struct: \n", err)
|
|
os.Exit(1)
|
|
}
|
|
return cnf
|
|
}
|