Files
go-sjles-pta-vote/server/config/config.go

70 lines
1.5 KiB
Go

package config
import (
"encoding/json"
"fmt"
"os"
"strings"
)
type Config struct {
DBPath string `json:"db_path"`
RedisHost string `json:"redis_host"`
RedisPassword string `json:"redis_password"`
}
var conf *Config
var conf_path string = ".env"
func GetConfig() *Config {
if conf != nil {
return conf
}
conf = &Config{}
// TODO: Make this into a ini or toml file
configContent, err := os.ReadFile(conf_path)
if err != nil {
fmt.Println("Error reading .env file: ", err)
os.Exit(1)
}
envVariables := strings.Split(string(configContent), "\n")
envMap := make(map[string]string)
// TODO: Better error checking for blank variables
for _, variable := range envVariables {
if strings.Contains(variable, "=") {
splitVariable := strings.Split(variable, "=")
envMap[splitVariable[0]] = splitVariable[1]
}
}
if err := json.Unmarshal([]byte(configContent), conf); err != nil {
fmt.Println("Error unmarshalling config file: ", err)
os.Exit(1)
}
// TODO: Better mapping of key to json values
// TODO: Better error checking if values are missing
// TODO: Default values
for key, value := range envMap {
if strings.Contains(key, "db_path") {
conf.DBPath = value
} else if strings.Contains(key, "redis_host") {
conf.RedisHost = value
} else if strings.Contains(key, "redis_password") {
conf.RedisPassword = value
} else {
fmt.Println("Error, Unknown key value pair: ", key, " = ", value)
}
}
return conf
}
func SetConfig(init_conf *Config) {
conf = init_conf
}