diff --git a/internal/configuration/sources/env/reader.go b/internal/configuration/sources/env/reader.go index 5a6383c2..ccab5223 100644 --- a/internal/configuration/sources/env/reader.go +++ b/internal/configuration/sources/env/reader.go @@ -77,6 +77,11 @@ func (r *Reader) Read() (settings settings.Settings, err error) { return settings, err } + settings.ControlServer, err = readControlServer() + if err != nil { + return settings, err + } + return settings, nil } diff --git a/internal/configuration/sources/env/server.go b/internal/configuration/sources/env/server.go new file mode 100644 index 00000000..51cdee96 --- /dev/null +++ b/internal/configuration/sources/env/server.go @@ -0,0 +1,53 @@ +package env + +import ( + "fmt" + "os" + + "github.com/qdm12/gluetun/internal/configuration/settings" + "github.com/qdm12/govalid/binary" + "github.com/qdm12/govalid/port" +) + +func readControlServer() (controlServer settings.ControlServer, err error) { + controlServer.Log, err = readControlServerLog() + if err != nil { + return controlServer, err + } + + controlServer.Port, err = readControlServerPort() + if err != nil { + return controlServer, err + } + + return controlServer, nil +} + +func readControlServerLog() (enabled *bool, err error) { + s := os.Getenv("HTTP_CONTROL_SERVER_LOG") + if s == "" { + return nil, nil //nolint:nilnil + } + + log, err := binary.Validate(s) + if err != nil { + return nil, fmt.Errorf("environment variable HTTP_CONTROL_SERVER_LOG: %w", err) + } + + return &log, nil +} + +func readControlServerPort() (p *uint16, err error) { + s := os.Getenv("HTTP_CONTROL_SERVER_PORT") + if s == "" { + return nil, nil //nolint:nilnil + } + + p = new(uint16) + *p, err = port.Validate(s, port.OptionPortListening(os.Geteuid())) + if err != nil { + return nil, fmt.Errorf("environment variable HTTP_CONTROL_SERVER_PORT: %w", err) + } + + return p, nil +}