diff --git a/internal/cli/openvpnconfig.go b/internal/cli/openvpnconfig.go index 069188a0..27871b27 100644 --- a/internal/cli/openvpnconfig.go +++ b/internal/cli/openvpnconfig.go @@ -34,15 +34,7 @@ func (c *cli) OpenvpnConfig(os os.OS) error { if err != nil { return err } - lines := providerConf.BuildConf( - connection, - allSettings.OpenVPN.Verbosity, - "nonroortuser", - allSettings.OpenVPN.Root, - allSettings.OpenVPN.Cipher, - allSettings.OpenVPN.Auth, - allSettings.OpenVPN.Provider.ExtraConfigOptions, - ) + lines := providerConf.BuildConf(connection, "nonroortuser", allSettings.OpenVPN) fmt.Println(strings.Join(lines, "\n")) return nil } diff --git a/internal/openvpn/loop.go b/internal/openvpn/loop.go index ba2077bb..a5f218d0 100644 --- a/internal/openvpn/loop.go +++ b/internal/openvpn/loop.go @@ -119,15 +119,7 @@ func (l *looper) Run(ctx context.Context, wg *sync.WaitGroup) { l.cancel() return } - lines := providerConf.BuildConf( - connection, - settings.Verbosity, - l.username, - settings.Root, - settings.Cipher, - settings.Auth, - settings.Provider.ExtraConfigOptions, - ) + lines := providerConf.BuildConf(connection, l.username, settings) if err := writeOpenvpnConf(lines, l.openFile); err != nil { l.logger.Error(err) diff --git a/internal/provider/cyberghost.go b/internal/provider/cyberghost.go index a65af058..d94a050d 100644 --- a/internal/provider/cyberghost.go +++ b/internal/provider/cyberghost.go @@ -11,6 +11,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/firewall" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -62,13 +63,13 @@ func (c *cyberghost) GetOpenVPNConnection(selection models.ServerSelection) ( return pickRandomConnection(connections, c.randSource), nil } -func (c *cyberghost) BuildConf(connection models.OpenVPNConnection, verbosity int, - username string, root bool, cipher, auth string, extras models.ExtraConfigOptions) (lines []string) { - if len(cipher) == 0 { - cipher = aes256cbc +func (c *cyberghost) BuildConf(connection models.OpenVPNConnection, + username string, settings settings.OpenVPN) (lines []string) { + if len(settings.Cipher) == 0 { + settings.Cipher = aes256cbc } - if len(auth) == 0 { - auth = sha256 + if len(settings.Auth) == 0 { + settings.Auth = sha256 } lines = []string{ "client", @@ -94,17 +95,17 @@ func (c *cyberghost) BuildConf(connection models.OpenVPNConnection, verbosity in "suppress-timestamps", // Modified variables - fmt.Sprintf("verb %d", verbosity), + fmt.Sprintf("verb %d", settings.Verbosity), fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf), fmt.Sprintf("proto %s", connection.Protocol), fmt.Sprintf("remote %s %d", connection.IP, connection.Port), - fmt.Sprintf("cipher %s", cipher), - fmt.Sprintf("auth %s", auth), + fmt.Sprintf("cipher %s", settings.Cipher), + fmt.Sprintf("auth %s", settings.Auth), } - if strings.HasSuffix(cipher, "-gcm") { + if strings.HasSuffix(settings.Cipher, "-gcm") { lines = append(lines, "ncp-ciphers AES-256-GCM:AES-256-CBC:AES-128-GCM") } - if !root { + if !settings.Root { lines = append(lines, "user "+username) } lines = append(lines, []string{ @@ -117,14 +118,14 @@ func (c *cyberghost) BuildConf(connection models.OpenVPNConnection, verbosity in lines = append(lines, []string{ "", "-----BEGIN CERTIFICATE-----", - extras.ClientCertificate, + settings.Provider.ExtraConfigOptions.ClientCertificate, "-----END CERTIFICATE-----", "", }...) lines = append(lines, []string{ "", "-----BEGIN PRIVATE KEY-----", - extras.ClientKey, + settings.Provider.ExtraConfigOptions.ClientKey, "-----END PRIVATE KEY-----", "", "", diff --git a/internal/provider/mullvad.go b/internal/provider/mullvad.go index 67e64313..4ae03d69 100644 --- a/internal/provider/mullvad.go +++ b/internal/provider/mullvad.go @@ -10,6 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/firewall" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -73,9 +74,9 @@ func (m *mullvad) GetOpenVPNConnection(selection models.ServerSelection) ( } func (m *mullvad) BuildConf(connection models.OpenVPNConnection, - verbosity int, username string, root bool, cipher, auth string, extras models.ExtraConfigOptions) (lines []string) { - if len(cipher) == 0 { - cipher = aes256cbc + username string, settings settings.OpenVPN) (lines []string) { + if len(settings.Cipher) == 0 { + settings.Cipher = aes256cbc } lines = []string{ "client", @@ -101,19 +102,19 @@ func (m *mullvad) BuildConf(connection models.OpenVPNConnection, "suppress-timestamps", // Modified variables - fmt.Sprintf("verb %d", verbosity), + fmt.Sprintf("verb %d", settings.Verbosity), fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf), fmt.Sprintf("proto %s", connection.Protocol), fmt.Sprintf("remote %s %d", connection.IP, connection.Port), - fmt.Sprintf("cipher %s", cipher), + fmt.Sprintf("cipher %s", settings.Cipher), } - if extras.OpenVPNIPv6 { + if settings.Provider.ExtraConfigOptions.OpenVPNIPv6 { lines = append(lines, "tun-ipv6") } else { lines = append(lines, `pull-filter ignore "route-ipv6"`) lines = append(lines, `pull-filter ignore "ifconfig-ipv6"`) } - if !root { + if !settings.Root { lines = append(lines, "user "+username) } lines = append(lines, []string{ diff --git a/internal/provider/nordvpn.go b/internal/provider/nordvpn.go index 1533d0de..4d567bbb 100644 --- a/internal/provider/nordvpn.go +++ b/internal/provider/nordvpn.go @@ -10,6 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/firewall" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -78,13 +79,13 @@ func (n *nordvpn) GetOpenVPNConnection(selection models.ServerSelection) ( return pickRandomConnection(connections, n.randSource), nil } -func (n *nordvpn) BuildConf(connection models.OpenVPNConnection, verbosity int, username string, root bool, - cipher, auth string, extras models.ExtraConfigOptions) (lines []string) { - if len(cipher) == 0 { - cipher = aes256cbc +func (n *nordvpn) BuildConf(connection models.OpenVPNConnection, + username string, settings settings.OpenVPN) (lines []string) { + if len(settings.Cipher) == 0 { + settings.Cipher = aes256cbc } - if len(auth) == 0 { - auth = "sha512" + if len(settings.Auth) == 0 { + settings.Auth = "sha512" } lines = []string{ "client", @@ -113,14 +114,14 @@ func (n *nordvpn) BuildConf(connection models.OpenVPNConnection, verbosity int, "suppress-timestamps", // Modified variables - fmt.Sprintf("verb %d", verbosity), + fmt.Sprintf("verb %d", settings.Verbosity), fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf), fmt.Sprintf("proto %s", connection.Protocol), fmt.Sprintf("remote %s %d", connection.IP.String(), connection.Port), - fmt.Sprintf("cipher %s", cipher), - fmt.Sprintf("auth %s", auth), + fmt.Sprintf("cipher %s", settings.Cipher), + fmt.Sprintf("auth %s", settings.Auth), } - if !root { + if !settings.Root { lines = append(lines, "user "+username) } lines = append(lines, []string{ diff --git a/internal/provider/piav4.go b/internal/provider/piav4.go index ff9235c8..f209f8a6 100644 --- a/internal/provider/piav4.go +++ b/internal/provider/piav4.go @@ -19,6 +19,7 @@ import ( "github.com/qdm12/gluetun/internal/firewall" gluetunLog "github.com/qdm12/gluetun/internal/logging" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -109,11 +110,11 @@ func (p *pia) GetOpenVPNConnection(selection models.ServerSelection) ( return connection, nil } -func (p *pia) BuildConf(connection models.OpenVPNConnection, verbosity int, username string, root bool, - cipher, auth string, extras models.ExtraConfigOptions) (lines []string) { +func (p *pia) BuildConf(connection models.OpenVPNConnection, + username string, settings settings.OpenVPN) (lines []string) { var X509CRL, certificate string var defaultCipher, defaultAuth string - if extras.EncryptionPreset == constants.PIAEncryptionPresetNormal { + if settings.Provider.ExtraConfigOptions.EncryptionPreset == constants.PIAEncryptionPresetNormal { defaultCipher = "aes-128-cbc" defaultAuth = "sha1" X509CRL = constants.PiaX509CRLNormal @@ -124,11 +125,11 @@ func (p *pia) BuildConf(connection models.OpenVPNConnection, verbosity int, user X509CRL = constants.PiaX509CRLStrong certificate = constants.PIACertificateStrong } - if len(cipher) == 0 { - cipher = defaultCipher + if len(settings.Cipher) == 0 { + settings.Cipher = defaultCipher } - if len(auth) == 0 { - auth = defaultAuth + if len(settings.Auth) == 0 { + settings.Auth = defaultAuth } lines = []string{ "client", @@ -150,17 +151,17 @@ func (p *pia) BuildConf(connection models.OpenVPNConnection, verbosity int, user "suppress-timestamps", // Modified variables - fmt.Sprintf("verb %d", verbosity), + fmt.Sprintf("verb %d", settings.Verbosity), fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf), fmt.Sprintf("proto %s", connection.Protocol), fmt.Sprintf("remote %s %d", connection.IP, connection.Port), - fmt.Sprintf("cipher %s", cipher), - fmt.Sprintf("auth %s", auth), + fmt.Sprintf("cipher %s", settings.Cipher), + fmt.Sprintf("auth %s", settings.Auth), } - if strings.HasSuffix(cipher, "-gcm") { + if strings.HasSuffix(settings.Cipher, "-gcm") { lines = append(lines, "ncp-disable") } - if !root { + if !settings.Root { lines = append(lines, "user "+username) } lines = append(lines, []string{ diff --git a/internal/provider/privado.go b/internal/provider/privado.go index e36021ed..b51a1cc5 100644 --- a/internal/provider/privado.go +++ b/internal/provider/privado.go @@ -10,6 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/firewall" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -70,13 +71,13 @@ func (s *privado) GetOpenVPNConnection(selection models.ServerSelection) ( return pickRandomConnection(connections, s.randSource), nil } -func (s *privado) BuildConf(connection models.OpenVPNConnection, verbosity int, username string, root bool, - cipher, auth string, extras models.ExtraConfigOptions) (lines []string) { - if len(cipher) == 0 { - cipher = aes256cbc +func (s *privado) BuildConf(connection models.OpenVPNConnection, + username string, settings settings.OpenVPN) (lines []string) { + if len(settings.Cipher) == 0 { + settings.Cipher = aes256cbc } - if len(auth) == 0 { - auth = sha256 + if len(settings.Auth) == 0 { + settings.Auth = sha256 } lines = []string{ "client", @@ -96,14 +97,14 @@ func (s *privado) BuildConf(connection models.OpenVPNConnection, verbosity int, "suppress-timestamps", // Modified variables - fmt.Sprintf("verb %d", verbosity), + fmt.Sprintf("verb %d", settings.Verbosity), fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf), fmt.Sprintf("proto %s", connection.Protocol), fmt.Sprintf("remote %s %d", connection.IP, connection.Port), - fmt.Sprintf("cipher %s", cipher), - fmt.Sprintf("auth %s", auth), + fmt.Sprintf("cipher %s", settings.Cipher), + fmt.Sprintf("auth %s", settings.Auth), } - if !root { + if !settings.Root { lines = append(lines, "user "+username) } lines = append(lines, []string{ diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 372829c8..229d6a70 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -8,6 +8,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/firewall" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -15,8 +16,7 @@ import ( // Provider contains methods to read and modify the openvpn configuration to connect as a client. type Provider interface { GetOpenVPNConnection(selection models.ServerSelection) (connection models.OpenVPNConnection, err error) - BuildConf(connection models.OpenVPNConnection, verbosity int, username string, - root bool, cipher, auth string, extras models.ExtraConfigOptions) (lines []string) + BuildConf(connection models.OpenVPNConnection, username string, settings settings.OpenVPN) (lines []string) PortForward(ctx context.Context, client *http.Client, openFile os.OpenFileFunc, pfLogger logging.Logger, gateway net.IP, fw firewall.Configurator, syncState func(port uint16) (pfFilepath models.Filepath)) diff --git a/internal/provider/purevpn.go b/internal/provider/purevpn.go index e81bc507..c778770f 100644 --- a/internal/provider/purevpn.go +++ b/internal/provider/purevpn.go @@ -10,6 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/firewall" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -72,10 +73,10 @@ func (p *purevpn) GetOpenVPNConnection(selection models.ServerSelection) ( return pickRandomConnection(connections, p.randSource), nil } -func (p *purevpn) BuildConf(connection models.OpenVPNConnection, verbosity int, username string, root bool, - cipher, auth string, extras models.ExtraConfigOptions) (lines []string) { - if len(cipher) == 0 { - cipher = aes256cbc +func (p *purevpn) BuildConf(connection models.OpenVPNConnection, + username string, settings settings.OpenVPN) (lines []string) { + if len(settings.Cipher) == 0 { + settings.Cipher = aes256cbc } lines = []string{ "client", @@ -101,13 +102,13 @@ func (p *purevpn) BuildConf(connection models.OpenVPNConnection, verbosity int, "suppress-timestamps", // Modified variables - fmt.Sprintf("verb %d", verbosity), + fmt.Sprintf("verb %d", settings.Verbosity), fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf), fmt.Sprintf("proto %s", connection.Protocol), fmt.Sprintf("remote %s %d", connection.IP.String(), connection.Port), - fmt.Sprintf("cipher %s", cipher), + fmt.Sprintf("cipher %s", settings.Cipher), } - if !root { + if !settings.Root { lines = append(lines, "user "+username) } lines = append(lines, []string{ @@ -140,8 +141,8 @@ func (p *purevpn) BuildConf(connection models.OpenVPNConnection, verbosity int, "", "", }...) - if len(auth) > 0 { - lines = append(lines, "auth "+auth) + if len(settings.Auth) > 0 { + lines = append(lines, "auth "+settings.Auth) } if connection.Protocol == constants.UDP { lines = append(lines, "explicit-exit-notify") diff --git a/internal/provider/surfshark.go b/internal/provider/surfshark.go index e0e99cb0..cbfb5448 100644 --- a/internal/provider/surfshark.go +++ b/internal/provider/surfshark.go @@ -10,6 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/firewall" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -73,13 +74,13 @@ func (s *surfshark) GetOpenVPNConnection(selection models.ServerSelection) ( return pickRandomConnection(connections, s.randSource), nil } -func (s *surfshark) BuildConf(connection models.OpenVPNConnection, verbosity int, username string, root bool, - cipher, auth string, extras models.ExtraConfigOptions) (lines []string) { - if len(cipher) == 0 { - cipher = aes256cbc +func (s *surfshark) BuildConf(connection models.OpenVPNConnection, + username string, settings settings.OpenVPN) (lines []string) { + if len(settings.Cipher) == 0 { + settings.Cipher = aes256cbc } - if len(auth) == 0 { - auth = "SHA512" + if len(settings.Auth) == 0 { + settings.Auth = "SHA512" } lines = []string{ "client", @@ -109,14 +110,14 @@ func (s *surfshark) BuildConf(connection models.OpenVPNConnection, verbosity int "suppress-timestamps", // Modified variables - fmt.Sprintf("verb %d", verbosity), + fmt.Sprintf("verb %d", settings.Verbosity), fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf), fmt.Sprintf("proto %s", connection.Protocol), fmt.Sprintf("remote %s %d", connection.IP, connection.Port), - fmt.Sprintf("cipher %s", cipher), - fmt.Sprintf("auth %s", auth), + fmt.Sprintf("cipher %s", settings.Cipher), + fmt.Sprintf("auth %s", settings.Auth), } - if !root { + if !settings.Root { lines = append(lines, "user "+username) } lines = append(lines, []string{ diff --git a/internal/provider/vyprvpn.go b/internal/provider/vyprvpn.go index 3e6e744a..1db16794 100644 --- a/internal/provider/vyprvpn.go +++ b/internal/provider/vyprvpn.go @@ -10,6 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/firewall" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -69,13 +70,13 @@ func (v *vyprvpn) GetOpenVPNConnection(selection models.ServerSelection) ( return pickRandomConnection(connections, v.randSource), nil } -func (v *vyprvpn) BuildConf(connection models.OpenVPNConnection, verbosity int, username string, - root bool, cipher, auth string, extras models.ExtraConfigOptions) (lines []string) { - if len(cipher) == 0 { - cipher = aes256cbc +func (v *vyprvpn) BuildConf(connection models.OpenVPNConnection, + username string, settings settings.OpenVPN) (lines []string) { + if len(settings.Cipher) == 0 { + settings.Cipher = aes256cbc } - if len(auth) == 0 { - auth = "SHA256" + if len(settings.Auth) == 0 { + settings.Auth = "SHA256" } lines = []string{ "client", @@ -98,14 +99,14 @@ func (v *vyprvpn) BuildConf(connection models.OpenVPNConnection, verbosity int, "suppress-timestamps", // Modified variables - fmt.Sprintf("verb %d", verbosity), + fmt.Sprintf("verb %d", settings.Verbosity), fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf), fmt.Sprintf("proto %s", connection.Protocol), fmt.Sprintf("remote %s %d", connection.IP, connection.Port), - fmt.Sprintf("cipher %s", cipher), - fmt.Sprintf("auth %s", auth), + fmt.Sprintf("cipher %s", settings.Cipher), + fmt.Sprintf("auth %s", settings.Auth), } - if !root { + if !settings.Root { lines = append(lines, "user "+username) } lines = append(lines, []string{ diff --git a/internal/provider/windscribe.go b/internal/provider/windscribe.go index f7e6a74f..35650389 100644 --- a/internal/provider/windscribe.go +++ b/internal/provider/windscribe.go @@ -11,6 +11,7 @@ import ( "github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/firewall" "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/settings" "github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/os" ) @@ -72,13 +73,13 @@ func (w *windscribe) GetOpenVPNConnection(selection models.ServerSelection) (con return pickRandomConnection(connections, w.randSource), nil } -func (w *windscribe) BuildConf(connection models.OpenVPNConnection, verbosity int, username string, - root bool, cipher, auth string, extras models.ExtraConfigOptions) (lines []string) { - if len(cipher) == 0 { - cipher = aes256cbc +func (w *windscribe) BuildConf(connection models.OpenVPNConnection, + username string, settings settings.OpenVPN) (lines []string) { + if len(settings.Cipher) == 0 { + settings.Cipher = aes256cbc } - if len(auth) == 0 { - auth = "sha512" + if len(settings.Auth) == 0 { + settings.Auth = "sha512" } lines = []string{ "client", @@ -100,17 +101,17 @@ func (w *windscribe) BuildConf(connection models.OpenVPNConnection, verbosity in "suppress-timestamps", // Modified variables - fmt.Sprintf("verb %d", verbosity), + fmt.Sprintf("verb %d", settings.Verbosity), fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf), fmt.Sprintf("proto %s", connection.Protocol), fmt.Sprintf("remote %s %d", connection.IP, connection.Port), - fmt.Sprintf("cipher %s", cipher), - fmt.Sprintf("auth %s", auth), + fmt.Sprintf("cipher %s", settings.Cipher), + fmt.Sprintf("auth %s", settings.Auth), } - if strings.HasSuffix(cipher, "-gcm") { + if strings.HasSuffix(settings.Cipher, "-gcm") { lines = append(lines, "ncp-ciphers AES-256-GCM:AES-256-CBC:AES-128-GCM") } - if !root { + if !settings.Root { lines = append(lines, "user "+username) } lines = append(lines, []string{