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 \"pdwebconf.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)) } } if DebugMode() { log.SetLogLevel(4) } else { log.SetLogLevel(3) } } 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") }