mirror of
https://github.com/bluenviron/mediamtx
synced 2025-02-19 21:16:53 +00:00
allow removing default WebRTC ICE server with environment variables (#2064)
This commit is contained in:
parent
8dad1e9d50
commit
1398f42e08
28
internal/conf/env/env.go
vendored
28
internal/conf/env/env.go
vendored
@ -150,7 +150,7 @@ func loadEnvInternal(env map[string]string, prefix string, rv reflect.Value) err
|
|||||||
if rt.Elem() == reflect.TypeOf("") {
|
if rt.Elem() == reflect.TypeOf("") {
|
||||||
if ev, ok := env[prefix]; ok {
|
if ev, ok := env[prefix]; ok {
|
||||||
if ev == "" {
|
if ev == "" {
|
||||||
rv.Set(reflect.ValueOf([]string{}))
|
rv.Set(reflect.MakeSlice(rv.Type(), 0, 0))
|
||||||
} else {
|
} else {
|
||||||
rv.Set(reflect.ValueOf(strings.Split(ev, ",")))
|
rv.Set(reflect.ValueOf(strings.Split(ev, ",")))
|
||||||
}
|
}
|
||||||
@ -159,19 +159,23 @@ func loadEnvInternal(env map[string]string, prefix string, rv reflect.Value) err
|
|||||||
}
|
}
|
||||||
|
|
||||||
if rt.Elem().Kind() == reflect.Struct {
|
if rt.Elem().Kind() == reflect.Struct {
|
||||||
for i := 0; ; i++ {
|
if ev, ok := env[prefix]; ok && ev == "" { // special case: empty list
|
||||||
itemPrefix := prefix + "_" + strconv.FormatInt(int64(i), 10)
|
rv.Set(reflect.MakeSlice(rv.Type(), 0, 0))
|
||||||
if !envHasAtLeastAKeyWithPrefix(env, itemPrefix) {
|
} else {
|
||||||
break
|
for i := 0; ; i++ {
|
||||||
}
|
itemPrefix := prefix + "_" + strconv.FormatInt(int64(i), 10)
|
||||||
|
if !envHasAtLeastAKeyWithPrefix(env, itemPrefix) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
elem := reflect.New(rt.Elem())
|
elem := reflect.New(rt.Elem())
|
||||||
err := loadEnvInternal(env, itemPrefix, elem.Elem())
|
err := loadEnvInternal(env, itemPrefix, elem.Elem())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
rv.Set(reflect.Append(rv, elem.Elem()))
|
rv.Set(reflect.Append(rv, elem.Elem()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
24
internal/conf/env/env_test.go
vendored
24
internal/conf/env/env_test.go
vendored
@ -47,15 +47,16 @@ type mySubStruct struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type testStruct struct {
|
type testStruct struct {
|
||||||
MyString string
|
MyString string
|
||||||
MyInt int
|
MyInt int
|
||||||
MyFloat float64
|
MyFloat float64
|
||||||
MyBool bool
|
MyBool bool
|
||||||
MyDuration myDuration
|
MyDuration myDuration
|
||||||
MyMap map[string]*mapEntry
|
MyMap map[string]*mapEntry
|
||||||
MySlice []string
|
MySlice []string
|
||||||
MySliceEmpty []string
|
MySliceEmpty []string
|
||||||
MySliceSubStruct []mySubStruct
|
MySliceSubStruct []mySubStruct
|
||||||
|
MySliceSubStructEmpty []mySubStruct
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLoad(t *testing.T) {
|
func TestLoad(t *testing.T) {
|
||||||
@ -104,6 +105,9 @@ func TestLoad(t *testing.T) {
|
|||||||
os.Setenv("MYPREFIX_MYSLICESUBSTRUCT_1_PASSWORD", "pass2")
|
os.Setenv("MYPREFIX_MYSLICESUBSTRUCT_1_PASSWORD", "pass2")
|
||||||
defer os.Unsetenv("MYPREFIX_MYSLICESUBSTRUCT_1_PASSWORD")
|
defer os.Unsetenv("MYPREFIX_MYSLICESUBSTRUCT_1_PASSWORD")
|
||||||
|
|
||||||
|
os.Setenv("MYPREFIX_MYSLICESUBSTRUCTEMPTY", "")
|
||||||
|
defer os.Unsetenv("MYPREFIX_MYSLICESUBSTRUCTEMPTY")
|
||||||
|
|
||||||
var s testStruct
|
var s testStruct
|
||||||
err := Load("MYPREFIX", &s)
|
err := Load("MYPREFIX", &s)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -136,4 +140,6 @@ func TestLoad(t *testing.T) {
|
|||||||
Password: "pass2",
|
Password: "pass2",
|
||||||
},
|
},
|
||||||
}, s.MySliceSubStruct)
|
}, s.MySliceSubStruct)
|
||||||
|
|
||||||
|
require.Equal(t, []mySubStruct{}, s.MySliceSubStructEmpty)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user