diff --git a/internal/cli/openvpnconfig.go b/internal/cli/openvpnconfig.go index 46a1a734..19263817 100644 --- a/internal/cli/openvpnconfig.go +++ b/internal/cli/openvpnconfig.go @@ -70,7 +70,7 @@ func (c *CLI) OpenvpnConfig(logger OpenvpnConfigLogger, source Source, providers := provider.NewProviders(storage, time.Now, warner, client, unzipper, parallelResolver, ipFetcher, openvpnFileExtractor) - providerConf := providers.Get(*allSettings.VPN.Provider.Name) + providerConf := providers.Get(allSettings.VPN.Provider.Name) connection, err := providerConf.GetConnection( allSettings.VPN.Provider.ServerSelection, ipv6Supported) if err != nil { diff --git a/internal/configuration/settings/provider.go b/internal/configuration/settings/provider.go index bbe4d38b..24496fc4 100644 --- a/internal/configuration/settings/provider.go +++ b/internal/configuration/settings/provider.go @@ -13,8 +13,8 @@ import ( // Provider contains settings specific to a VPN provider. type Provider struct { // Name is the VPN service provider name. - // It cannot be nil in the internal state. - Name *string `json:"name"` + // It cannot be the empty string in the internal state. + Name string `json:"name"` // ServerSelection is the settings to // select the VPN server. ServerSelection ServerSelection `json:"server_selection"` @@ -40,16 +40,16 @@ func (p *Provider) validate(vpnType string, storage Storage) (err error) { providers.Windscribe, } } - if err = validate.IsOneOf(*p.Name, validNames...); err != nil { + if err = validate.IsOneOf(p.Name, validNames...); err != nil { return fmt.Errorf("%w for Wireguard: %w", ErrVPNProviderNameNotValid, err) } - err = p.ServerSelection.validate(*p.Name, storage) + err = p.ServerSelection.validate(p.Name, storage) if err != nil { return fmt.Errorf("server selection: %w", err) } - err = p.PortForwarding.Validate(*p.Name) + err = p.PortForwarding.Validate(p.Name) if err != nil { return fmt.Errorf("port forwarding: %w", err) } @@ -59,27 +59,27 @@ func (p *Provider) validate(vpnType string, storage Storage) (err error) { func (p *Provider) copy() (copied Provider) { return Provider{ - Name: gosettings.CopyPointer(p.Name), + Name: p.Name, ServerSelection: p.ServerSelection.copy(), PortForwarding: p.PortForwarding.Copy(), } } func (p *Provider) mergeWith(other Provider) { - p.Name = gosettings.MergeWithPointer(p.Name, other.Name) + p.Name = gosettings.MergeWithString(p.Name, other.Name) p.ServerSelection.mergeWith(other.ServerSelection) p.PortForwarding.mergeWith(other.PortForwarding) } func (p *Provider) overrideWith(other Provider) { - p.Name = gosettings.OverrideWithPointer(p.Name, other.Name) + p.Name = gosettings.OverrideWithString(p.Name, other.Name) p.ServerSelection.overrideWith(other.ServerSelection) p.PortForwarding.OverrideWith(other.PortForwarding) } func (p *Provider) setDefaults() { - p.Name = gosettings.DefaultPointer(p.Name, providers.PrivateInternetAccess) - p.ServerSelection.setDefaults(*p.Name) + p.Name = gosettings.DefaultString(p.Name, providers.PrivateInternetAccess) + p.ServerSelection.setDefaults(p.Name) p.PortForwarding.setDefaults() } @@ -89,7 +89,7 @@ func (p Provider) String() string { func (p Provider) toLinesNode() (node *gotree.Node) { node = gotree.New("VPN provider settings:") - node.Appendf("Name: %s", *p.Name) + node.Appendf("Name: %s", p.Name) node.AppendNode(p.ServerSelection.toLinesNode()) node.AppendNode(p.PortForwarding.toLinesNode()) return node diff --git a/internal/configuration/settings/settings.go b/internal/configuration/settings/settings.go index 1745a14d..5cf66c91 100644 --- a/internal/configuration/settings/settings.go +++ b/internal/configuration/settings/settings.go @@ -133,7 +133,7 @@ func (s *Settings) SetDefaults() { s.System.setDefaults() s.Version.setDefaults() s.VPN.setDefaults() - s.Updater.SetDefaults(*s.VPN.Provider.Name) + s.Updater.SetDefaults(s.VPN.Provider.Name) s.Pprof.SetDefaults() } @@ -162,16 +162,16 @@ func (s Settings) toLinesNode() (node *gotree.Node) { } func (s Settings) Warnings() (warnings []string) { - if *s.VPN.Provider.Name == providers.HideMyAss { + if s.VPN.Provider.Name == providers.HideMyAss { warnings = append(warnings, "HideMyAss dropped support for Linux OpenVPN "+ " so this will likely not work anymore. See https://github.com/qdm12/gluetun/issues/1498.") } - if helpers.IsOneOf(*s.VPN.Provider.Name, providers.SlickVPN) && + if helpers.IsOneOf(s.VPN.Provider.Name, providers.SlickVPN) && s.VPN.Type == vpn.OpenVPN { warnings = append(warnings, "OpenVPN 2.5 uses OpenSSL 3 "+ "which prohibits the usage of weak security in today's standards. "+ - *s.VPN.Provider.Name+" uses weak security which is out "+ + s.VPN.Provider.Name+" uses weak security which is out "+ "of Gluetun's control so the only workaround is to allow such weaknesses "+ `using the OpenVPN option tls-cipher "DEFAULT:@SECLEVEL=0". `+ "You might want to reach to your provider so they upgrade their certificates. "+ diff --git a/internal/configuration/settings/vpn.go b/internal/configuration/settings/vpn.go index 2d66e6d0..87696ed4 100644 --- a/internal/configuration/settings/vpn.go +++ b/internal/configuration/settings/vpn.go @@ -33,12 +33,12 @@ func (v *VPN) Validate(storage Storage, ipv6Supported bool) (err error) { } if v.Type == vpn.OpenVPN { - err := v.OpenVPN.validate(*v.Provider.Name) + err := v.OpenVPN.validate(v.Provider.Name) if err != nil { return fmt.Errorf("OpenVPN settings: %w", err) } } else { - err := v.Wireguard.validate(*v.Provider.Name, ipv6Supported) + err := v.Wireguard.validate(v.Provider.Name, ipv6Supported) if err != nil { return fmt.Errorf("Wireguard settings: %w", err) } @@ -73,8 +73,8 @@ func (v *VPN) OverrideWith(other VPN) { func (v *VPN) setDefaults() { v.Type = gosettings.DefaultString(v.Type, vpn.OpenVPN) v.Provider.setDefaults() - v.OpenVPN.setDefaults(*v.Provider.Name) - v.Wireguard.setDefaults(*v.Provider.Name) + v.OpenVPN.setDefaults(v.Provider.Name) + v.Wireguard.setDefaults(v.Provider.Name) } func (v VPN) String() string { diff --git a/internal/configuration/sources/env/provider.go b/internal/configuration/sources/env/provider.go index b14d029b..9a52b835 100644 --- a/internal/configuration/sources/env/provider.go +++ b/internal/configuration/sources/env/provider.go @@ -12,12 +12,8 @@ import ( func (s *Source) readProvider(vpnType string) (provider settings.Provider, err error) { provider.Name = s.readVPNServiceProvider(vpnType) - var providerName string - if provider.Name != nil { - providerName = *provider.Name - } - provider.ServerSelection, err = s.readServerSelection(providerName, vpnType) + provider.ServerSelection, err = s.readServerSelection(provider.Name, vpnType) if err != nil { return provider, fmt.Errorf("server selection: %w", err) } @@ -30,21 +26,20 @@ func (s *Source) readProvider(vpnType string) (provider settings.Provider, err e return provider, nil } -func (s *Source) readVPNServiceProvider(vpnType string) (vpnProviderPtr *string) { - valuePtr := s.env.Get("VPN_SERVICE_PROVIDER", env.RetroKeys("VPNSP")) - if valuePtr == nil { +func (s *Source) readVPNServiceProvider(vpnType string) (vpnProvider string) { + vpnProvider = s.env.String("VPN_SERVICE_PROVIDER", env.RetroKeys("VPNSP")) + if vpnProvider == "" { if vpnType != vpn.Wireguard && s.env.Get("OPENVPN_CUSTOM_CONFIG") != nil { // retro compatibility - return ptrTo(providers.Custom) + return providers.Custom } - return nil + return "" } - value := *valuePtr - value = strings.ToLower(value) - if value == "pia" { // retro compatibility - return ptrTo(providers.PrivateInternetAccess) + vpnProvider = strings.ToLower(vpnProvider) + if vpnProvider == "pia" { // retro compatibility + return providers.PrivateInternetAccess } - return ptrTo(value) + return vpnProvider } diff --git a/internal/vpn/run.go b/internal/vpn/run.go index 1666d74a..749dd92b 100644 --- a/internal/vpn/run.go +++ b/internal/vpn/run.go @@ -20,7 +20,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) { for ctx.Err() == nil { settings := l.state.GetSettings() - providerConf := l.providers.Get(*settings.Provider.Name) + providerConf := l.providers.Get(settings.Provider.Name) portForwarder := getPortForwarder(providerConf, l.providers, *settings.Provider.PortForwarding.Provider)