- Use `RetroKeys` option with env.* method calls - Use `CSV*` typed methods - Inject `handleDeprecatedKey` function
85 lines
2.1 KiB
Go
85 lines
2.1 KiB
Go
package env
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/qdm12/gluetun/internal/configuration/settings"
|
|
"github.com/qdm12/gosettings/sources/env"
|
|
"github.com/qdm12/govalid/binary"
|
|
)
|
|
|
|
func (s *Source) readHTTPProxy() (httpProxy settings.HTTPProxy, err error) {
|
|
httpProxy.User = s.env.Get("HTTPPROXY_USER",
|
|
env.RetroKeys("PROXY_USER", "TINYPROXY_USER"),
|
|
env.ForceLowercase(false))
|
|
|
|
httpProxy.Password = s.env.Get("HTTPPROXY_PASSWORD",
|
|
env.RetroKeys("PROXY_PASSWORD", "TINYPROXY_PASSWORD"),
|
|
env.ForceLowercase(false))
|
|
|
|
httpProxy.ListeningAddress, err = s.readHTTProxyListeningAddress()
|
|
if err != nil {
|
|
return httpProxy, err
|
|
}
|
|
|
|
httpProxy.Enabled, err = s.env.BoolPtr("HTTPPROXY", env.RetroKeys("PROXY", "TINYPROXY"))
|
|
if err != nil {
|
|
return httpProxy, err
|
|
}
|
|
|
|
httpProxy.Stealth, err = s.env.BoolPtr("HTTPPROXY_STEALTH")
|
|
if err != nil {
|
|
return httpProxy, err
|
|
}
|
|
|
|
httpProxy.Log, err = s.readHTTProxyLog()
|
|
if err != nil {
|
|
return httpProxy, err
|
|
}
|
|
|
|
return httpProxy, nil
|
|
}
|
|
|
|
func (s *Source) readHTTProxyListeningAddress() (listeningAddress string, err error) {
|
|
const currentKey = "HTTPPROXY_LISTENING_ADDRESS"
|
|
key := firstKeySet(s.env, "HTTPPROXY_PORT", "TINYPROXY_PORT", "PROXY_PORT",
|
|
currentKey)
|
|
switch key {
|
|
case "":
|
|
return "", nil
|
|
case currentKey:
|
|
return s.env.String(key), nil
|
|
}
|
|
|
|
// Retro-compatible keys using a port only
|
|
s.handleDeprecatedKey(key, currentKey)
|
|
port, err := s.env.Uint16Ptr(key)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return fmt.Sprintf(":%d", *port), nil
|
|
}
|
|
|
|
func (s *Source) readHTTProxyLog() (enabled *bool, err error) {
|
|
const currentKey = "HTTPPROXY_LOG"
|
|
key := firstKeySet(s.env, "PROXY_LOG", "TINYPROXY_LOG", "HTTPPROXY_LOG")
|
|
switch key {
|
|
case "":
|
|
return nil, nil //nolint:nilnil
|
|
case currentKey:
|
|
return s.env.BoolPtr(key)
|
|
}
|
|
|
|
// Retro-compatible keys using different boolean verbs
|
|
s.handleDeprecatedKey(key, currentKey)
|
|
value := s.env.String(key)
|
|
retroOption := binary.OptionEnabled("on", "info", "connect", "notice")
|
|
|
|
enabled, err = binary.Validate(value, retroOption)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("environment variable %s: %w", key, err)
|
|
}
|
|
|
|
return enabled, nil
|
|
}
|