From 7e79d9696fecc1cee6326019390756164a0b0670 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 30 Mar 2020 07:58:40 -0400 Subject: [PATCH] TZ setting shown at start (#119) --- cmd/main.go | 38 ++++++++++++------------ internal/params/params.go | 3 +- internal/params/{ids.go => system.go} | 5 ++++ internal/settings/settings.go | 11 ++----- internal/settings/system.go | 42 +++++++++++++++++++++++++++ 5 files changed, 71 insertions(+), 28 deletions(-) rename internal/params/{ids.go => system.go} (72%) create mode 100644 internal/settings/system.go diff --git a/cmd/main.go b/cmd/main.go index 1e428a5b..648e9a45 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -72,11 +72,11 @@ func main() { e.FatalOnError(err) logger.Info(allSettings.String()) - err = alpineConf.CreateUser("nonrootuser", allSettings.UID) + err = alpineConf.CreateUser("nonrootuser", allSettings.System.UID) e.FatalOnError(err) - err = fileManager.SetOwnership("/etc/unbound", allSettings.UID, allSettings.GID) + err = fileManager.SetOwnership("/etc/unbound", allSettings.System.UID, allSettings.System.GID) e.FatalOnError(err) - err = fileManager.SetOwnership("/etc/tinyproxy", allSettings.UID, allSettings.GID) + err = fileManager.SetOwnership("/etc/tinyproxy", allSettings.System.UID, allSettings.System.GID) e.FatalOnError(err) if err := ovpnConf.CheckTUN(); err != nil { @@ -97,7 +97,7 @@ func main() { openVPNUser = allSettings.Windscribe.User openVPNPassword = allSettings.Windscribe.Password } - err = ovpnConf.WriteAuthFile(openVPNUser, openVPNPassword, allSettings.UID, allSettings.GID) + err = ovpnConf.WriteAuthFile(openVPNUser, openVPNPassword, allSettings.System.UID, allSettings.System.GID) e.FatalOnError(err) // Temporarily reset chain policies allowing Kubernetes sidecar to @@ -118,11 +118,11 @@ func main() { if allSettings.DNS.Enabled { initialDNSToUse := constants.DNSProviderMapping()[allSettings.DNS.Providers[0]] dnsConf.UseDNSInternally(initialDNSToUse.IPs[0]) - err = dnsConf.DownloadRootHints(allSettings.UID, allSettings.GID) + err = dnsConf.DownloadRootHints(allSettings.System.UID, allSettings.System.GID) e.FatalOnError(err) - err = dnsConf.DownloadRootKey(allSettings.UID, allSettings.GID) + err = dnsConf.DownloadRootKey(allSettings.System.UID, allSettings.System.GID) e.FatalOnError(err) - err = dnsConf.MakeUnboundConf(allSettings.DNS, allSettings.UID, allSettings.GID) + err = dnsConf.MakeUnboundConf(allSettings.DNS, allSettings.System.UID, allSettings.System.GID) e.FatalOnError(err) stream, waitFn, err := dnsConf.Start(allSettings.DNS.VerbosityDetailsLevel) e.FatalOnError(err) @@ -150,8 +150,8 @@ func main() { connections, allSettings.PIA.Encryption, allSettings.OpenVPN.Verbosity, - allSettings.UID, - allSettings.GID, + allSettings.System.UID, + allSettings.System.GID, allSettings.OpenVPN.Root, allSettings.OpenVPN.Cipher, allSettings.OpenVPN.Auth) @@ -168,8 +168,8 @@ func main() { err = mullvadConf.BuildConf( connections, allSettings.OpenVPN.Verbosity, - allSettings.UID, - allSettings.GID, + allSettings.System.UID, + allSettings.System.GID, allSettings.OpenVPN.Root, allSettings.OpenVPN.Cipher) e.FatalOnError(err) @@ -183,8 +183,8 @@ func main() { err = windscribeConf.BuildConf( connections, allSettings.OpenVPN.Verbosity, - allSettings.UID, - allSettings.GID, + allSettings.System.UID, + allSettings.System.GID, allSettings.OpenVPN.Root, allSettings.OpenVPN.Cipher, allSettings.OpenVPN.Auth) @@ -212,8 +212,8 @@ func main() { allSettings.TinyProxy.Port, allSettings.TinyProxy.User, allSettings.TinyProxy.Password, - allSettings.UID, - allSettings.GID) + allSettings.System.UID, + allSettings.System.GID) e.FatalOnError(err) err = firewallConf.AllowAnyIncomingOnPort(allSettings.TinyProxy.Port) e.FatalOnError(err) @@ -232,8 +232,8 @@ func main() { allSettings.ShadowSocks.Port, allSettings.ShadowSocks.Password, allSettings.ShadowSocks.Method, - allSettings.UID, - allSettings.GID) + allSettings.System.UID, + allSettings.System.GID) e.FatalOnError(err) err = firewallConf.AllowAnyIncomingOnPort(allSettings.ShadowSocks.Port) e.FatalOnError(err) @@ -256,8 +256,8 @@ func main() { if err := piaConf.WritePortForward( allSettings.PIA.PortForwarding.Filepath, port, - allSettings.UID, - allSettings.GID); err != nil { + allSettings.System.UID, + allSettings.System.GID); err != nil { logger.Error("port forwarding:", err) } if err := piaConf.AllowPortForwardFirewall(constants.TUN, port); err != nil { diff --git a/internal/params/params.go b/internal/params/params.go index 2edde897..b99d39e4 100644 --- a/internal/params/params.go +++ b/internal/params/params.go @@ -28,9 +28,10 @@ type ParamsReader interface { GetDNSOverTLSPrivateAddresses() (privateAddresses []string) GetDNSOverTLSIPv6() (ipv6 bool, err error) - // IDs + // System GetUID() (uid int, err error) GetGID() (gid int, err error) + GetTimezone() (timezone string, err error) // Firewall getters GetExtraSubnets() (extraSubnets []net.IPNet, err error) diff --git a/internal/params/ids.go b/internal/params/system.go similarity index 72% rename from internal/params/ids.go rename to internal/params/system.go index 335806fc..db813325 100644 --- a/internal/params/ids.go +++ b/internal/params/system.go @@ -13,3 +13,8 @@ func (p *paramsReader) GetUID() (uid int, err error) { func (p *paramsReader) GetGID() (gid int, err error) { return p.envParams.GetEnvIntRange("GID", 0, 65535, libparams.Default("1000")) } + +// GetTZ obtains the timezone from the environment variable TZ +func (p *paramsReader) GetTimezone() (timezone string, err error) { + return p.envParams.GetEnv("TZ") +} diff --git a/internal/settings/settings.go b/internal/settings/settings.go index d1a1ef61..20541192 100644 --- a/internal/settings/settings.go +++ b/internal/settings/settings.go @@ -14,12 +14,11 @@ type Settings struct { PIA PIA Mullvad Mullvad Windscribe Windscribe + System System DNS DNS Firewall Firewall TinyProxy TinyProxy ShadowSocks ShadowSocks - UID int - GID int } func (s *Settings) String() string { @@ -34,9 +33,9 @@ func (s *Settings) String() string { } return strings.Join([]string{ "Settings summary below:", - fmt.Sprintf("|-- Using UID %d and GID %d", s.UID, s.GID), s.OpenVPN.String(), vpnServiceProvider, + s.System.String(), s.DNS.String(), s.Firewall.String(), s.TinyProxy.String(), @@ -118,11 +117,7 @@ func GetAllSettings(params params.ParamsReader) (settings Settings, err error) { if err != nil { return settings, err } - settings.UID, err = params.GetUID() - if err != nil { - return settings, err - } - settings.GID, err = params.GetGID() + settings.System, err = GetSystemSettings(params) if err != nil { return settings, err } diff --git a/internal/settings/system.go b/internal/settings/system.go new file mode 100644 index 00000000..012c0c4f --- /dev/null +++ b/internal/settings/system.go @@ -0,0 +1,42 @@ +package settings + +import ( + "fmt" + "strings" + + "github.com/qdm12/private-internet-access-docker/internal/params" +) + +// System contains settings to configure system related elements +type System struct { + UID int + GID int + Timezone string +} + +// GetSystemSettings obtains the System settings using the params functions +func GetSystemSettings(params params.ParamsReader) (settings System, err error) { + settings.UID, err = params.GetUID() + if err != nil { + return settings, err + } + settings.GID, err = params.GetGID() + if err != nil { + return settings, err + } + settings.Timezone, err = params.GetTimezone() + if err != nil { + return settings, err + } + return settings, nil +} + +func (s *System) String() string { + settingsList := []string{ + "System settings:", + fmt.Sprintf("User ID: %d", s.UID), + fmt.Sprintf("Group ID: %d", s.GID), + fmt.Sprintf("Timezone: %s", s.Timezone), + } + return strings.Join(settingsList, "\n|--") +}