diff --git a/cmd/gluetun/main.go b/cmd/gluetun/main.go index dae0cf1a..58b2ccd6 100644 --- a/cmd/gluetun/main.go +++ b/cmd/gluetun/main.go @@ -135,7 +135,7 @@ func _main(background context.Context, args []string) int { waiter := command.NewWaiter() - connections, err := providerConf.GetOpenVPNConnections(allSettings.Provider.ServerSelection) + connections, err := providerConf.GetOpenVPNConnections(allSettings.OpenVPN.Provider.ServerSelection) fatalOnError(err) err = providerConf.BuildConf( connections, @@ -145,7 +145,7 @@ func _main(background context.Context, args []string) int { allSettings.OpenVPN.Root, allSettings.OpenVPN.Cipher, allSettings.OpenVPN.Auth, - allSettings.Provider.ExtraConfigOptions, + allSettings.OpenVPN.Provider.ExtraConfigOptions, ) fatalOnError(err) @@ -265,9 +265,9 @@ func _main(background context.Context, args []string) int { logger.Error(err) exitStatus = 1 } - if allSettings.Provider.PortForwarding.Enabled { - logger.Info("Clearing forwarded port status file %s", allSettings.Provider.PortForwarding.Filepath) - if err := fileManager.Remove(string(allSettings.Provider.PortForwarding.Filepath)); err != nil { + if allSettings.OpenVPN.Provider.PortForwarding.Enabled { + logger.Info("Clearing forwarded port status file %s", allSettings.OpenVPN.Provider.PortForwarding.Filepath) + if err := fileManager.Remove(string(allSettings.OpenVPN.Provider.PortForwarding.Filepath)); err != nil { logger.Error(err) exitStatus = 1 } @@ -381,9 +381,9 @@ func onConnected(allSettings settings.Settings, routingConf routing.Routing, defaultInterface string, providerConf provider.Provider, ) { - if allSettings.Provider.PortForwarding.Enabled { + if allSettings.OpenVPN.Provider.PortForwarding.Enabled { time.AfterFunc(5*time.Second, func() { - setupPortForwarding(logger, providerConf, allSettings.Provider.PortForwarding.Filepath, allSettings.System.UID, allSettings.System.GID) + setupPortForwarding(logger, providerConf, allSettings.OpenVPN.Provider.PortForwarding.Filepath, allSettings.System.UID, allSettings.System.GID) }) } diff --git a/internal/settings/openvpn.go b/internal/settings/openvpn.go index f2e3e4c1..ec6b0178 100644 --- a/internal/settings/openvpn.go +++ b/internal/settings/openvpn.go @@ -4,6 +4,8 @@ import ( "fmt" "strings" + "github.com/qdm12/private-internet-access-docker/internal/constants" + "github.com/qdm12/private-internet-access-docker/internal/models" "github.com/qdm12/private-internet-access-docker/internal/params" ) @@ -15,19 +17,23 @@ type OpenVPN struct { Root bool Cipher string Auth string + Provider models.ProviderSettings } // GetOpenVPNSettings obtains the OpenVPN settings using the params functions -func GetOpenVPNSettings(paramsReader params.Reader, passwordRequired bool) (settings OpenVPN, err error) { +func GetOpenVPNSettings(paramsReader params.Reader, vpnProvider models.VPNProvider) (settings OpenVPN, err error) { settings.User, err = paramsReader.GetUser() if err != nil { return settings, err } // Remove spaces in user ID to simplify user's life, thanks @JeordyR settings.User = strings.ReplaceAll(settings.User, " ", "") - settings.Password, err = paramsReader.GetPassword(passwordRequired) + isMullvad := vpnProvider == constants.Mullvad + settings.Password, err = paramsReader.GetPassword(!isMullvad) if err != nil { return settings, err + } else if isMullvad { + settings.Password = "m" } settings.Verbosity, err = paramsReader.GetOpenVPNVerbosity() if err != nil { @@ -45,7 +51,21 @@ func GetOpenVPNSettings(paramsReader params.Reader, passwordRequired bool) (sett if err != nil { return settings, err } - return settings, nil + switch vpnProvider { + case constants.PrivateInternetAccess: + settings.Provider, err = GetPIASettings(paramsReader) + case constants.Mullvad: + settings.Provider, err = GetMullvadSettings(paramsReader) + case constants.Windscribe: + settings.Provider, err = GetWindscribeSettings(paramsReader) + case constants.Surfshark: + settings.Provider, err = GetSurfsharkSettings(paramsReader) + case constants.Cyberghost: + settings.Provider, err = GetCyberghostSettings(paramsReader) + default: + err = fmt.Errorf("VPN service provider %q is not valid", vpnProvider) + } + return settings, err } func (o *OpenVPN) String() string { @@ -59,6 +79,7 @@ func (o *OpenVPN) String() string { "Password: [redacted]", "Verbosity level: " + fmt.Sprintf("%d", o.Verbosity), "Run as root: " + runAsRoot, + o.Provider.String(), } if len(o.Cipher) > 0 { settingsList = append(settingsList, "Custom cipher: "+o.Cipher) diff --git a/internal/settings/settings.go b/internal/settings/settings.go index 9e6aa2a0..0d9e4957 100644 --- a/internal/settings/settings.go +++ b/internal/settings/settings.go @@ -1,10 +1,8 @@ package settings import ( - "fmt" "strings" - "github.com/qdm12/private-internet-access-docker/internal/constants" "github.com/qdm12/private-internet-access-docker/internal/models" "github.com/qdm12/private-internet-access-docker/internal/params" ) @@ -13,7 +11,6 @@ import ( type Settings struct { VPNSP models.VPNProvider OpenVPN OpenVPN - Provider models.ProviderSettings System System DNS DNS Firewall Firewall @@ -25,7 +22,6 @@ func (s *Settings) String() string { return strings.Join([]string{ "Settings summary below:", s.OpenVPN.String(), - s.Provider.String(), s.System.String(), s.DNS.String(), s.Firewall.String(), @@ -42,31 +38,10 @@ func GetAllSettings(paramsReader params.Reader) (settings Settings, err error) { if err != nil { return settings, err } - switch settings.VPNSP { - case constants.PrivateInternetAccess: - settings.Provider, err = GetPIASettings(paramsReader) - case constants.Mullvad: - settings.Provider, err = GetMullvadSettings(paramsReader) - case constants.Windscribe: - settings.Provider, err = GetWindscribeSettings(paramsReader) - case constants.Surfshark: - settings.Provider, err = GetSurfsharkSettings(paramsReader) - case constants.Cyberghost: - settings.Provider, err = GetCyberghostSettings(paramsReader) - default: - err = fmt.Errorf("VPN service provider %q is not valid", settings.VPNSP) - } + settings.OpenVPN, err = GetOpenVPNSettings(paramsReader, settings.VPNSP) if err != nil { return settings, err } - isMullvad := settings.VPNSP == constants.Mullvad - settings.OpenVPN, err = GetOpenVPNSettings(paramsReader, !isMullvad) - if err != nil { - return settings, err - } - if isMullvad { - settings.OpenVPN.Password = "m" - } settings.DNS, err = GetDNSSettings(paramsReader) if err != nil { return settings, err