summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bridge/config/config.go22
1 files changed, 18 insertions, 4 deletions
diff --git a/bridge/config/config.go b/bridge/config/config.go
index efbb8e1f..ea62d7cc 100644
--- a/bridge/config/config.go
+++ b/bridge/config/config.go
@@ -3,6 +3,7 @@ package config
import (
"bytes"
"io/ioutil"
+ "path/filepath"
"strings"
"sync"
"time"
@@ -240,7 +241,8 @@ func NewConfig(rootLogger *logrus.Logger, cfgfile string) Config {
logger.Fatalf("Failed to read configuration file: %#v", err)
}
- mycfg := newConfigFromString(logger, input)
+ cfgtype := detectConfigType(cfgfile)
+ mycfg := newConfigFromString(logger, input, cfgtype)
if mycfg.cv.General.MediaDownloadSize == 0 {
mycfg.cv.General.MediaDownloadSize = 1000000
}
@@ -251,14 +253,26 @@ func NewConfig(rootLogger *logrus.Logger, cfgfile string) Config {
return mycfg
}
+// detectConfigType detects JSON and YAML formats, defaults to TOML.
+func detectConfigType(cfgfile string) string {
+ fileExt := filepath.Ext(cfgfile)
+ switch fileExt {
+ case ".json":
+ return "json"
+ case ".yaml", ".yml":
+ return "yaml"
+ }
+ return "toml"
+}
+
// NewConfigFromString instantiates a new configuration based on the specified string.
func NewConfigFromString(rootLogger *logrus.Logger, input []byte) Config {
logger := rootLogger.WithFields(logrus.Fields{"prefix": "config"})
- return newConfigFromString(logger, input)
+ return newConfigFromString(logger, input, "toml")
}
-func newConfigFromString(logger *logrus.Entry, input []byte) *config {
- viper.SetConfigType("toml")
+func newConfigFromString(logger *logrus.Entry, input []byte, cfgtype string) *config {
+ viper.SetConfigType(cfgtype)
viper.SetEnvPrefix("matterbridge")
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_"))
viper.AutomaticEnv()