From 33b8f5f5962dfab117a361674d98355f2c07b8fb Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Sat, 11 Jun 2022 20:11:20 +0000 Subject: [PATCH] chore(settings): updater DNS address as string --- cmd/gluetun/main.go | 2 +- internal/cli/update.go | 13 +++---------- internal/configuration/settings/updater.go | 13 ++++++------- internal/configuration/sources/env/updater.go | 5 ++--- 4 files changed, 12 insertions(+), 21 deletions(-) diff --git a/cmd/gluetun/main.go b/cmd/gluetun/main.go index 830b588d..e58a5da8 100644 --- a/cmd/gluetun/main.go +++ b/cmd/gluetun/main.go @@ -380,7 +380,7 @@ func _main(ctx context.Context, buildInfo models.BuildInformation, updaterLogger := logger.New(log.SetComponent("updater")) unzipper := unzip.New(httpClient) - parallelResolver := resolver.NewParallelResolver(allSettings.Updater.DNSAddress.String()) + parallelResolver := resolver.NewParallelResolver(allSettings.Updater.DNSAddress) providers := provider.NewProviders(storage, time.Now, updaterLogger, httpClient, unzipper, parallelResolver) diff --git a/internal/cli/update.go b/internal/cli/update.go index 3350eae8..438c15ab 100644 --- a/internal/cli/update.go +++ b/internal/cli/update.go @@ -5,7 +5,6 @@ import ( "errors" "flag" "fmt" - "net" "net/http" "strings" "time" @@ -22,7 +21,6 @@ import ( var ( ErrModeUnspecified = errors.New("at least one of -enduser or -maintainer must be specified") - ErrDNSAddress = errors.New("DNS address is not valid") ErrNoProviderSpecified = errors.New("no provider was specified") ) @@ -35,12 +33,12 @@ type UpdaterLogger interface { func (c *CLI) Update(ctx context.Context, args []string, logger UpdaterLogger) error { options := settings.Updater{} var endUserMode, maintainerMode, updateAll bool - var dnsAddress, csvProviders string + var csvProviders string flagSet := flag.NewFlagSet("update", flag.ExitOnError) flagSet.BoolVar(&endUserMode, "enduser", false, "Write results to /gluetun/servers.json (for end users)") flagSet.BoolVar(&maintainerMode, "maintainer", false, "Write results to ./internal/storage/servers.json to modify the program (for maintainers)") - flagSet.StringVar(&dnsAddress, "dns", "8.8.8.8", "DNS resolver address to use") + flagSet.StringVar(&options.DNSAddress, "dns", "8.8.8.8", "DNS resolver address to use") flagSet.BoolVar(&updateAll, "all", false, "Update servers for all VPN providers") flagSet.StringVar(&csvProviders, "providers", "", "CSV string of VPN providers to update server data for") if err := flagSet.Parse(args); err != nil { @@ -51,11 +49,6 @@ func (c *CLI) Update(ctx context.Context, args []string, logger UpdaterLogger) e return ErrModeUnspecified } - options.DNSAddress = net.ParseIP(dnsAddress) - if options.DNSAddress == nil { - return fmt.Errorf("%w: %s", ErrDNSAddress, dnsAddress) - } - if updateAll { options.Providers = providers.All() } else { @@ -80,7 +73,7 @@ func (c *CLI) Update(ctx context.Context, args []string, logger UpdaterLogger) e const clientTimeout = 10 * time.Second httpClient := &http.Client{Timeout: clientTimeout} unzipper := unzip.New(httpClient) - parallelResolver := resolver.NewParallelResolver(options.DNSAddress.String()) + parallelResolver := resolver.NewParallelResolver(options.DNSAddress) providers := provider.NewProviders(storage, time.Now, logger, httpClient, unzipper, parallelResolver) diff --git a/internal/configuration/settings/updater.go b/internal/configuration/settings/updater.go index 6807695e..63c144ea 100644 --- a/internal/configuration/settings/updater.go +++ b/internal/configuration/settings/updater.go @@ -2,7 +2,6 @@ package settings import ( "fmt" - "net" "strings" "time" @@ -21,8 +20,8 @@ type Updater struct { Period *time.Duration // DNSAddress is the DNS server address to use // to resolve VPN server hostnames to IP addresses. - // It cannot be nil in the internal state. - DNSAddress net.IP + // It cannot be the empty string in the internal state. + DNSAddress string // Providers is the list of VPN service providers // to update server information for. Providers []string @@ -56,7 +55,7 @@ func (u Updater) Validate() (err error) { func (u *Updater) copy() (copied Updater) { return Updater{ Period: helpers.CopyDurationPtr(u.Period), - DNSAddress: helpers.CopyIP(u.DNSAddress), + DNSAddress: u.DNSAddress, Providers: helpers.CopyStringSlice(u.Providers), } } @@ -65,7 +64,7 @@ func (u *Updater) copy() (copied Updater) { // unset field of the receiver settings object. func (u *Updater) mergeWith(other Updater) { u.Period = helpers.MergeWithDuration(u.Period, other.Period) - u.DNSAddress = helpers.MergeWithIP(u.DNSAddress, other.DNSAddress) + u.DNSAddress = helpers.MergeWithString(u.DNSAddress, other.DNSAddress) u.Providers = helpers.MergeStringSlices(u.Providers, other.Providers) } @@ -74,13 +73,13 @@ func (u *Updater) mergeWith(other Updater) { // settings. func (u *Updater) overrideWith(other Updater) { u.Period = helpers.OverrideWithDuration(u.Period, other.Period) - u.DNSAddress = helpers.OverrideWithIP(u.DNSAddress, other.DNSAddress) + u.DNSAddress = helpers.OverrideWithString(u.DNSAddress, other.DNSAddress) u.Providers = helpers.OverrideWithStringSlice(u.Providers, other.Providers) } func (u *Updater) SetDefaults(vpnProvider string) { u.Period = helpers.DefaultDuration(u.Period, 0) - u.DNSAddress = helpers.DefaultIP(u.DNSAddress, net.IPv4(1, 1, 1, 1)) + u.DNSAddress = helpers.DefaultString(u.DNSAddress, "1.1.1.1:53") if len(u.Providers) == 0 && vpnProvider != providers.Custom { u.Providers = []string{vpnProvider} } diff --git a/internal/configuration/sources/env/updater.go b/internal/configuration/sources/env/updater.go index e7645bb4..f02b62cd 100644 --- a/internal/configuration/sources/env/updater.go +++ b/internal/configuration/sources/env/updater.go @@ -2,7 +2,6 @@ package env import ( "fmt" - "net" "time" "github.com/qdm12/gluetun/internal/configuration/settings" @@ -37,11 +36,11 @@ func readUpdaterPeriod() (period *time.Duration, err error) { return period, nil } -func readUpdaterDNSAddress() (ip net.IP, err error) { +func readUpdaterDNSAddress() (address string, err error) { // TODO this is currently using Cloudflare in // plaintext to not be blocked by DNS over TLS by default. // If a plaintext address is set in the DNS settings, this one will be used. // use custom future encrypted DNS written in Go without blocking // as it's too much trouble to start another parallel unbound instance for now. - return nil, nil + return "", nil }