diff --git a/cmd/app/app.go b/cmd/app/app.go index 0311131d..c78d4a72 100644 --- a/cmd/app/app.go +++ b/cmd/app/app.go @@ -2,6 +2,7 @@ package app import ( "flag" + "github.com/AlexxIT/go2rtc/pkg/shell" "github.com/rs/zerolog" "github.com/rs/zerolog/log" "gopkg.in/yaml.v3" @@ -30,6 +31,8 @@ func Init() { } if data != nil { + data = []byte(shell.ReplaceEnvVars(string(data))) + if err := yaml.Unmarshal(data, &cfg); err != nil { println("ERROR: " + err.Error()) } diff --git a/pkg/shell/env.go b/pkg/shell/env.go new file mode 100644 index 00000000..fbc8f5bb --- /dev/null +++ b/pkg/shell/env.go @@ -0,0 +1,31 @@ +package shell + +import ( + "os" + "regexp" + "strings" +) + +func ReplaceEnvVars(text string) string { + re := regexp.MustCompile(`\${([^}{]+)}`) + return re.ReplaceAllStringFunc(text, func(match string) string { + key := match[2 : len(match)-1] + + var def string + i := strings.IndexByte(key, ':') + if i > 0 { + key, def = key[:i], key[i+1:] + } + + value, exists := os.LookupEnv(key) + if exists { + return value + } + + if def != "" { + return def + } + + return match + }) +}