Files
fnx_web/conf/config.go
2017-12-17 23:34:49 +01:00

96 lines
2.2 KiB
Go

package conf
import (
"os"
"sort"
"fornaxian.com/pixeldrain-web/log"
"github.com/spf13/viper"
)
var vi *viper.Viper
var defaultConfig = `# Pixeldrain Web UI server configuration
api_url_external = "/api" # Used in the web browser, can be a relative path
api_url_internal = "http://127.0.0.1:8080/api" # Used for internal API requests to the pixeldrain server, not visible to users
static_resource_dir = "res/static"
template_dir = "res/template"
debug_mode = false`
// Init reads the config file
func Init() {
if vi != nil {
log.Error("Config already initialized, can't ititialize again")
return
}
vi = viper.New()
vi.SetConfigType("toml")
vi.SetConfigName("pdwebconf")
vi.AddConfigPath(".")
vi.AddConfigPath("./conf")
vi.AddConfigPath("/etc")
vi.AddConfigPath("/usr/local/etc")
vi.SetDefault("api_url_external", "/api")
vi.SetDefault("api_url_internal", "http://127.0.0.1:8080/api")
vi.SetDefault("static_resource_dir", "./res/static")
vi.SetDefault("template_dir", "./res/template")
vi.SetDefault("debug_mode", false)
err := vi.ReadInConfig()
if err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
writeCfg()
log.Warn("Generated config file \"pdapiconf.toml\", please edit and run again.")
os.Exit(0)
} else if _, ok := err.(viper.ConfigParseError); ok {
log.Error("Could not parse config file: ", err)
} else {
log.Error("Unknown error occured while reading config file: ", err)
}
}
log.Info("Web UI configuration:")
keys := vi.AllKeys()
numKeys := len(keys)
sort.Strings(keys)
for i, v := range keys {
if i == numKeys-1 {
log.Info("└%21s: %v", v, vi.Get(v))
} else {
log.Info("├%21s: %v", v, vi.Get(v))
}
}
}
func writeCfg() {
file, err := os.Create("pdwebconf.toml")
if err != nil {
log.Error("Could not create config file: ", err)
}
file.WriteString(defaultConfig)
file.Close()
}
func ApiUrlExternal() string {
return vi.GetString("api_url_external")
}
func ApiUrlInternal() string {
return vi.GetString("api_url_internal")
}
func StaticResourceDir() string {
return vi.GetString("static_resource_dir")
}
func TemplateDir() string {
return vi.GetString("template_dir")
}
func DebugMode() bool {
return vi.GetBool("debug_mode")
}