From 6b017b226a9944940158331b7ff51abc6945b119 Mon Sep 17 00:00:00 2001 From: Jakub Date: Wed, 18 Mar 2020 23:20:29 +0100 Subject: Support JSON and YAML config formats (#1045) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jakub SokoĊ‚owski --- bridge/config/config.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'bridge') 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() -- cgit v1.2.3