From 3d8e61900ba4c872df6e4b86f5c60d75f9a05fef Mon Sep 17 00:00:00 2001 From: "Quentin McGaw (desktop)" Date: Thu, 19 Aug 2021 14:09:41 +0000 Subject: [PATCH] Maint: make VPN connection not specific to OpenVPN - Add VPN field to ServerSelection struct - Set VPN type to server selection at start using VPN_TYPE - Change OpenVPNConnection to Connection with Type field - Rename Provider GetOpenVPNConnection to GetConnection - Rename GetTargetIPOpenVPNConnection to GetTargetIPConnection - Rename PickRandomOpenVPNConnection to PickRandomConnection - Add 'OpenVPN' prefix to OpenVPN specific methods on connection --- internal/cli/openvpnconfig.go | 2 +- internal/configuration/provider.go | 44 ++++++++-------- internal/configuration/selection.go | 1 + internal/configuration/vpn.go | 2 +- internal/firewall/firewall.go | 2 +- internal/firewall/iptables.go | 2 +- internal/firewall/vpn.go | 6 +-- internal/models/connection.go | 50 +++++++++++++++++++ internal/models/openvpn.go | 44 ---------------- internal/openvpn/custom/custom.go | 2 +- internal/openvpn/custom/custom_test.go | 2 +- internal/openvpn/custom/extract.go | 4 +- internal/openvpn/custom/extract_test.go | 18 +++---- internal/openvpn/custom/modify.go | 6 +-- internal/openvpn/custom/modify_test.go | 4 +- internal/provider/cyberghost/connection.go | 13 ++--- internal/provider/cyberghost/openvpnconf.go | 6 +-- internal/provider/fastestvpn/connection.go | 13 ++--- internal/provider/fastestvpn/openvpnconf.go | 6 +-- internal/provider/hidemyass/connection.go | 13 ++--- internal/provider/hidemyass/openvpnconf.go | 4 +- internal/provider/ipvanish/connection.go | 13 ++--- internal/provider/ipvanish/openvpnconf.go | 4 +- internal/provider/ivpn/connection.go | 13 ++--- internal/provider/ivpn/openvpnconf.go | 4 +- internal/provider/mullvad/connection.go | 13 ++--- internal/provider/mullvad/openvpnconf.go | 6 +-- internal/provider/nordvpn/connection.go | 13 ++--- internal/provider/nordvpn/openvpnconf.go | 6 +-- internal/provider/privado/connection.go | 13 ++--- internal/provider/privado/openvpnconf.go | 6 +-- .../privateinternetaccess/connection.go | 13 ++--- .../privateinternetaccess/openvpnconf.go | 6 +-- internal/provider/privatevpn/connection.go | 13 ++--- internal/provider/privatevpn/openvpnconf.go | 6 +-- internal/provider/protonvpn/connection.go | 13 ++--- internal/provider/protonvpn/openvpnconf.go | 6 +-- internal/provider/provider.go | 4 +- internal/provider/purevpn/connection.go | 13 ++--- internal/provider/purevpn/openvpnconf.go | 6 +-- internal/provider/surfshark/connection.go | 13 ++--- internal/provider/surfshark/openvpnconf.go | 6 +-- internal/provider/torguard/connection.go | 13 ++--- internal/provider/torguard/openvpnconf.go | 6 +-- internal/provider/utils/pick.go | 4 +- internal/provider/utils/pick_test.go | 16 +++--- internal/provider/utils/targetip.go | 4 +- internal/provider/vpnunlimited/connection.go | 13 ++--- internal/provider/vpnunlimited/openvpnconf.go | 6 +-- internal/provider/vyprvpn/connection.go | 13 ++--- internal/provider/vyprvpn/openvpnconf.go | 6 +-- internal/provider/windscribe/connection.go | 13 ++--- internal/provider/windscribe/openvpnconf.go | 6 +-- internal/vpn/openvpn.go | 4 +- 54 files changed, 283 insertions(+), 255 deletions(-) create mode 100644 internal/models/connection.go delete mode 100644 internal/models/openvpn.go diff --git a/internal/cli/openvpnconfig.go b/internal/cli/openvpnconfig.go index 7d154698..5f040839 100644 --- a/internal/cli/openvpnconfig.go +++ b/internal/cli/openvpnconfig.go @@ -29,7 +29,7 @@ func (c *CLI) OpenvpnConfig(logger logging.Logger) error { return err } providerConf := provider.New(allSettings.VPN.Provider.Name, allServers, time.Now) - connection, err := providerConf.GetOpenVPNConnection(allSettings.VPN.Provider.ServerSelection) + connection, err := providerConf.GetConnection(allSettings.VPN.Provider.ServerSelection) if err != nil { return err } diff --git a/internal/configuration/provider.go b/internal/configuration/provider.go index 694a8cf3..b5a41ab7 100644 --- a/internal/configuration/provider.go +++ b/internal/configuration/provider.go @@ -82,52 +82,56 @@ var ( ErrInvalidVPNProvider = errors.New("invalid VPN provider") ) -func (settings *Provider) read(r reader) error { +func (settings *Provider) read(r reader, vpnType string) error { err := settings.readVPNServiceProvider(r) if err != nil { return err } - var readProvider func(r reader) error switch settings.Name { case constants.Cyberghost: - readProvider = settings.readCyberghost + err = settings.readCyberghost(r) case constants.Fastestvpn: - readProvider = settings.readFastestvpn + err = settings.readFastestvpn(r) case constants.HideMyAss: - readProvider = settings.readHideMyAss + err = settings.readHideMyAss(r) case constants.Ipvanish: - readProvider = settings.readIpvanish + err = settings.readIpvanish(r) case constants.Ivpn: - readProvider = settings.readIvpn + err = settings.readIvpn(r) case constants.Mullvad: - readProvider = settings.readMullvad + err = settings.readMullvad(r) case constants.Nordvpn: - readProvider = settings.readNordvpn + err = settings.readNordvpn(r) case constants.Privado: - readProvider = settings.readPrivado + err = settings.readPrivado(r) case constants.PrivateInternetAccess: - readProvider = settings.readPrivateInternetAccess + err = settings.readPrivateInternetAccess(r) case constants.Privatevpn: - readProvider = settings.readPrivatevpn + err = settings.readPrivatevpn(r) case constants.Protonvpn: - readProvider = settings.readProtonvpn + err = settings.readProtonvpn(r) case constants.Purevpn: - readProvider = settings.readPurevpn + err = settings.readPurevpn(r) case constants.Surfshark: - readProvider = settings.readSurfshark + err = settings.readSurfshark(r) case constants.Torguard: - readProvider = settings.readTorguard + err = settings.readTorguard(r) case constants.VPNUnlimited: - readProvider = settings.readVPNUnlimited + err = settings.readVPNUnlimited(r) case constants.Vyprvpn: - readProvider = settings.readVyprvpn + err = settings.readVyprvpn(r) case constants.Windscribe: - readProvider = settings.readWindscribe + err = settings.readWindscribe(r) default: return fmt.Errorf("%w: %s", ErrInvalidVPNProvider, settings.Name) } - return readProvider(r) + if err != nil { + return err + } + + settings.ServerSelection.VPN = vpnType + return nil } func (settings *Provider) readVPNServiceProvider(r reader) (err error) { diff --git a/internal/configuration/selection.go b/internal/configuration/selection.go index 45d3dadc..37cc34ce 100644 --- a/internal/configuration/selection.go +++ b/internal/configuration/selection.go @@ -9,6 +9,7 @@ import ( type ServerSelection struct { //nolint:maligned // Common + VPN string `json:"vpn"` TargetIP net.IP `json:"target_ip,omitempty"` // TODO comments // Cyberghost, PIA, Protonvpn, Surfshark, Windscribe, Vyprvpn, NordVPN diff --git a/internal/configuration/vpn.go b/internal/configuration/vpn.go index 8f3e6c10..633f3935 100644 --- a/internal/configuration/vpn.go +++ b/internal/configuration/vpn.go @@ -49,7 +49,7 @@ func (settings *VPN) read(r reader) (err error) { settings.Type = vpnType if !settings.isOpenVPNCustomConfig(r.env) { - if err := settings.Provider.read(r); err != nil { + if err := settings.Provider.read(r, vpnType); err != nil { return fmt.Errorf("%w: %s", errReadProviderSettings, err) } } diff --git a/internal/firewall/firewall.go b/internal/firewall/firewall.go index 5eaafbd8..ac55ad5c 100644 --- a/internal/firewall/firewall.go +++ b/internal/firewall/firewall.go @@ -39,7 +39,7 @@ type Config struct { //nolint:maligned // State enabled bool - vpnConnection models.OpenVPNConnection + vpnConnection models.Connection outboundSubnets []net.IPNet allowedInputPorts map[uint16]string // port to interface mapping stateMutex sync.Mutex diff --git a/internal/firewall/iptables.go b/internal/firewall/iptables.go index 9bf28df6..8fbb6baf 100644 --- a/internal/firewall/iptables.go +++ b/internal/firewall/iptables.go @@ -150,7 +150,7 @@ func (c *Config) acceptEstablishedRelatedTraffic(ctx context.Context, remove boo } func (c *Config) acceptOutputTrafficToVPN(ctx context.Context, - defaultInterface string, connection models.OpenVPNConnection, remove bool) error { + defaultInterface string, connection models.Connection, remove bool) error { instruction := fmt.Sprintf("%s OUTPUT -d %s -o %s -p %s -m %s --dport %d -j ACCEPT", appendOrDelete(remove), connection.IP, defaultInterface, connection.Protocol, connection.Protocol, connection.Port) diff --git a/internal/firewall/vpn.go b/internal/firewall/vpn.go index 68824dcf..e3c2b082 100644 --- a/internal/firewall/vpn.go +++ b/internal/firewall/vpn.go @@ -8,10 +8,10 @@ import ( ) type VPNConnectionSetter interface { - SetVPNConnection(ctx context.Context, connection models.OpenVPNConnection) error + SetVPNConnection(ctx context.Context, connection models.Connection) error } -func (c *Config) SetVPNConnection(ctx context.Context, connection models.OpenVPNConnection) (err error) { +func (c *Config) SetVPNConnection(ctx context.Context, connection models.Connection) (err error) { c.stateMutex.Lock() defer c.stateMutex.Unlock() @@ -33,7 +33,7 @@ func (c *Config) SetVPNConnection(ctx context.Context, connection models.OpenVPN c.logger.Error("cannot remove outdated VPN connection through firewall: " + err.Error()) } } - c.vpnConnection = models.OpenVPNConnection{} + c.vpnConnection = models.Connection{} remove = false if err := c.acceptOutputTrafficToVPN(ctx, c.defaultInterface, connection, remove); err != nil { return fmt.Errorf("cannot set VPN connection through firewall: %w", err) diff --git a/internal/models/connection.go b/internal/models/connection.go new file mode 100644 index 00000000..e9655b36 --- /dev/null +++ b/internal/models/connection.go @@ -0,0 +1,50 @@ +package models + +import ( + "fmt" + "net" +) + +type Connection struct { + // Type is the connection type and can be "openvpn" + Type string `json:"type"` + // IP is the VPN server IP address. + IP net.IP `json:"ip"` + // Port is the VPN server port. + Port uint16 `json:"port"` + // Protocol can be "tcp" or "udp". + Protocol string `json:"protocol"` + // Hostname is used for IPVanish, IVPN, Privado + // and Windscribe for TLS verification + Hostname string `json:"hostname"` +} + +func (c *Connection) Equal(other Connection) bool { + return c.IP.Equal(other.IP) && c.Port == other.Port && + c.Protocol == other.Protocol && c.Hostname == other.Hostname +} + +func (c Connection) OpenVPNRemoteLine() (line string) { + return "remote " + c.IP.String() + " " + fmt.Sprint(c.Port) +} + +func (c Connection) OpenVPNProtoLine() (line string) { + return "proto " + c.Protocol +} + +// UpdateEmptyWith updates each field of the connection where the +// value is not set using the value from the other connection. +func (c *Connection) UpdateEmptyWith(connection Connection) { + if c.IP == nil { + c.IP = connection.IP + } + if c.Port == 0 { + c.Port = connection.Port + } + if c.Protocol == "" { + c.Protocol = connection.Protocol + } + if c.Hostname == "" { + c.Hostname = connection.Hostname + } +} diff --git a/internal/models/openvpn.go b/internal/models/openvpn.go deleted file mode 100644 index 546d9a1e..00000000 --- a/internal/models/openvpn.go +++ /dev/null @@ -1,44 +0,0 @@ -package models - -import ( - "net" - "strconv" -) - -type OpenVPNConnection struct { - IP net.IP `json:"ip"` - Port uint16 `json:"port"` - Protocol string `json:"protocol"` - // Hostname is used for IPVanish, IVPN, Privado - // and Windscribe for TLS verification - Hostname string `json:"hostname"` -} - -func (o *OpenVPNConnection) Equal(other OpenVPNConnection) bool { - return o.IP.Equal(other.IP) && o.Port == other.Port && o.Protocol == other.Protocol && - o.Hostname == other.Hostname -} - -func (o OpenVPNConnection) RemoteLine() (line string) { - return "remote " + o.IP.String() + " " + strconv.Itoa(int(o.Port)) -} - -func (o OpenVPNConnection) ProtoLine() (line string) { - return "proto " + o.Protocol -} - -// UpdateEmptyWith updates each field of the connection where the value is not set. -func (o *OpenVPNConnection) UpdateEmptyWith(connection OpenVPNConnection) { - if o.IP == nil { - o.IP = connection.IP - } - if o.Port == 0 { - o.Port = connection.Port - } - if o.Protocol == "" { - o.Protocol = connection.Protocol - } - if o.Hostname == "" { - o.Hostname = connection.Hostname - } -} diff --git a/internal/openvpn/custom/custom.go b/internal/openvpn/custom/custom.go index d14229d2..3def8a26 100644 --- a/internal/openvpn/custom/custom.go +++ b/internal/openvpn/custom/custom.go @@ -14,7 +14,7 @@ var ( ) func BuildConfig(settings configuration.OpenVPN) ( - lines []string, connection models.OpenVPNConnection, err error) { + lines []string, connection models.Connection, err error) { lines, err = readCustomConfigLines(settings.Config) if err != nil { return nil, connection, fmt.Errorf("%w: %s", ErrReadCustomConfig, err) diff --git a/internal/openvpn/custom/custom_test.go b/internal/openvpn/custom/custom_test.go index 084dd9d5..4729fff1 100644 --- a/internal/openvpn/custom/custom_test.go +++ b/internal/openvpn/custom/custom_test.go @@ -54,7 +54,7 @@ func Test_BuildConfig(t *testing.T) { } assert.Equal(t, expectedLines, lines) - expectedConnection := models.OpenVPNConnection{ + expectedConnection := models.Connection{ IP: net.IPv4(1, 9, 8, 7), Port: 1194, Protocol: constants.UDP, diff --git a/internal/openvpn/custom/extract.go b/internal/openvpn/custom/extract.go index 80defbf0..230a67c3 100644 --- a/internal/openvpn/custom/extract.go +++ b/internal/openvpn/custom/extract.go @@ -17,7 +17,7 @@ var ( // extractConnectionFromLines always takes the first remote line only. func extractConnectionFromLines(lines []string) ( - connection models.OpenVPNConnection, err error) { + connection models.Connection, err error) { for i, line := range lines { newConnectionData, err := extractConnectionFromLine(line) if err != nil { @@ -54,7 +54,7 @@ var ( ) func extractConnectionFromLine(line string) ( - connection models.OpenVPNConnection, err error) { + connection models.Connection, err error) { switch { case strings.HasPrefix(line, "proto "): connection.Protocol, err = extractProto(line) diff --git a/internal/openvpn/custom/extract_test.go b/internal/openvpn/custom/extract_test.go index e0f7fc57..bdb3a906 100644 --- a/internal/openvpn/custom/extract_test.go +++ b/internal/openvpn/custom/extract_test.go @@ -16,12 +16,12 @@ func Test_extractConnectionFromLines(t *testing.T) { testCases := map[string]struct { lines []string - connection models.OpenVPNConnection + connection models.Connection err error }{ "success": { lines: []string{"bla bla", "proto tcp", "remote 1.2.3.4 1194 tcp"}, - connection: models.OpenVPNConnection{ + connection: models.Connection{ IP: net.IPv4(1, 2, 3, 4), Port: 1194, Protocol: constants.TCP, @@ -33,7 +33,7 @@ func Test_extractConnectionFromLines(t *testing.T) { }, "only use first values found": { lines: []string{"proto udp", "proto tcp", "remote 1.2.3.4 443 tcp", "remote 5.2.3.4 1194 udp"}, - connection: models.OpenVPNConnection{ + connection: models.Connection{ IP: net.IPv4(1, 2, 3, 4), Port: 443, Protocol: constants.UDP, @@ -41,14 +41,14 @@ func Test_extractConnectionFromLines(t *testing.T) { }, "no IP found": { lines: []string{"proto tcp"}, - connection: models.OpenVPNConnection{ + connection: models.Connection{ Protocol: constants.TCP, }, err: errRemoteLineNotFound, }, "default TCP port": { lines: []string{"remote 1.2.3.4", "proto tcp"}, - connection: models.OpenVPNConnection{ + connection: models.Connection{ IP: net.IPv4(1, 2, 3, 4), Port: 443, Protocol: constants.TCP, @@ -56,7 +56,7 @@ func Test_extractConnectionFromLines(t *testing.T) { }, "default UDP port": { lines: []string{"remote 1.2.3.4", "proto udp"}, - connection: models.OpenVPNConnection{ + connection: models.Connection{ IP: net.IPv4(1, 2, 3, 4), Port: 1194, Protocol: constants.UDP, @@ -88,7 +88,7 @@ func Test_extractConnectionFromLine(t *testing.T) { testCases := map[string]struct { line string - connection models.OpenVPNConnection + connection models.Connection isErr error }{ "irrelevant line": { @@ -100,7 +100,7 @@ func Test_extractConnectionFromLine(t *testing.T) { }, "extract proto success": { line: "proto tcp", - connection: models.OpenVPNConnection{ + connection: models.Connection{ Protocol: constants.TCP, }, }, @@ -110,7 +110,7 @@ func Test_extractConnectionFromLine(t *testing.T) { }, "extract remote success": { line: "remote 1.2.3.4 1194 udp", - connection: models.OpenVPNConnection{ + connection: models.Connection{ IP: net.IPv4(1, 2, 3, 4), Port: 1194, Protocol: constants.UDP, diff --git a/internal/openvpn/custom/modify.go b/internal/openvpn/custom/modify.go index 66da7a93..3bf0f651 100644 --- a/internal/openvpn/custom/modify.go +++ b/internal/openvpn/custom/modify.go @@ -11,7 +11,7 @@ import ( ) func modifyCustomConfig(lines []string, settings configuration.OpenVPN, - connection models.OpenVPNConnection) (modified []string) { + connection models.Connection) (modified []string) { // Remove some lines for _, line := range lines { switch { @@ -33,8 +33,8 @@ func modifyCustomConfig(lines []string, settings configuration.OpenVPN, } // Add values - modified = append(modified, connection.ProtoLine()) - modified = append(modified, connection.RemoteLine()) + modified = append(modified, connection.OpenVPNProtoLine()) + modified = append(modified, connection.OpenVPNRemoteLine()) modified = append(modified, "mute-replay-warnings") modified = append(modified, "auth-nocache") modified = append(modified, "pull-filter ignore \"auth-token\"") // prevent auth failed loop diff --git a/internal/openvpn/custom/modify_test.go b/internal/openvpn/custom/modify_test.go index e21aaca8..8f575175 100644 --- a/internal/openvpn/custom/modify_test.go +++ b/internal/openvpn/custom/modify_test.go @@ -16,7 +16,7 @@ func Test_modifyCustomConfig(t *testing.T) { testCases := map[string]struct { lines []string settings configuration.OpenVPN - connection models.OpenVPNConnection + connection models.Connection modified []string }{ "mixed": { @@ -36,7 +36,7 @@ func Test_modifyCustomConfig(t *testing.T) { MSSFix: 1000, ProcUser: "procuser", }, - connection: models.OpenVPNConnection{ + connection: models.Connection{ IP: net.IPv4(1, 2, 3, 4), Port: 1194, Protocol: constants.UDP, diff --git a/internal/provider/cyberghost/connection.go b/internal/provider/cyberghost/connection.go index c97e4693..9e224cfa 100644 --- a/internal/provider/cyberghost/connection.go +++ b/internal/provider/cyberghost/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (c *Cyberghost) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (c *Cyberghost) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { const port = 443 protocol := constants.UDP if selection.OpenVPN.TCP { @@ -20,10 +20,11 @@ func (c *Cyberghost) GetOpenVPNConnection(selection configuration.ServerSelectio return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -33,8 +34,8 @@ func (c *Cyberghost) GetOpenVPNConnection(selection configuration.ServerSelectio } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, c.randSource), nil + return utils.PickRandomConnection(connections, c.randSource), nil } diff --git a/internal/provider/cyberghost/openvpnconf.go b/internal/provider/cyberghost/openvpnconf.go index 41b99295..cc2edc70 100644 --- a/internal/provider/cyberghost/openvpnconf.go +++ b/internal/provider/cyberghost/openvpnconf.go @@ -10,7 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (c *Cyberghost) BuildConf(connection models.OpenVPNConnection, +func (c *Cyberghost) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -48,8 +48,8 @@ func (c *Cyberghost) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, } diff --git a/internal/provider/fastestvpn/connection.go b/internal/provider/fastestvpn/connection.go index f13deebb..0dbb13ae 100644 --- a/internal/provider/fastestvpn/connection.go +++ b/internal/provider/fastestvpn/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (f *Fastestvpn) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (f *Fastestvpn) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { const port = 4443 protocol := constants.UDP if selection.OpenVPN.TCP { @@ -20,10 +20,11 @@ func (f *Fastestvpn) GetOpenVPNConnection(selection configuration.ServerSelectio return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -33,8 +34,8 @@ func (f *Fastestvpn) GetOpenVPNConnection(selection configuration.ServerSelectio } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, f.randSource), nil + return utils.PickRandomConnection(connections, f.randSource), nil } diff --git a/internal/provider/fastestvpn/openvpnconf.go b/internal/provider/fastestvpn/openvpnconf.go index 03a90c40..8227b5a9 100644 --- a/internal/provider/fastestvpn/openvpnconf.go +++ b/internal/provider/fastestvpn/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (f *Fastestvpn) BuildConf(connection models.OpenVPNConnection, +func (f *Fastestvpn) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -51,8 +51,8 @@ func (f *Fastestvpn) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, } diff --git a/internal/provider/hidemyass/connection.go b/internal/provider/hidemyass/connection.go index d4b4ba61..608a8020 100644 --- a/internal/provider/hidemyass/connection.go +++ b/internal/provider/hidemyass/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (h *HideMyAss) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (h *HideMyAss) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { var port uint16 = 553 protocol := constants.UDP if selection.OpenVPN.TCP { @@ -25,10 +25,11 @@ func (h *HideMyAss) GetOpenVPNConnection(selection configuration.ServerSelection return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -38,8 +39,8 @@ func (h *HideMyAss) GetOpenVPNConnection(selection configuration.ServerSelection } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, h.randSource), nil + return utils.PickRandomConnection(connections, h.randSource), nil } diff --git a/internal/provider/hidemyass/openvpnconf.go b/internal/provider/hidemyass/openvpnconf.go index ae834efd..3ced884e 100644 --- a/internal/provider/hidemyass/openvpnconf.go +++ b/internal/provider/hidemyass/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (h *HideMyAss) BuildConf(connection models.OpenVPNConnection, +func (h *HideMyAss) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -42,7 +42,7 @@ func (h *HideMyAss) BuildConf(connection models.OpenVPNConnection, "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, "proto " + connection.Protocol, - connection.RemoteLine(), + connection.OpenVPNRemoteLine(), } lines = append(lines, utils.CipherLines(settings.Cipher, settings.Version)...) diff --git a/internal/provider/ipvanish/connection.go b/internal/provider/ipvanish/connection.go index e19e52ea..970c1f11 100644 --- a/internal/provider/ipvanish/connection.go +++ b/internal/provider/ipvanish/connection.go @@ -11,8 +11,8 @@ import ( var ErrProtocolUnsupported = errors.New("network protocol is not supported") -func (i *Ipvanish) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (i *Ipvanish) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { const port = 443 const protocol = constants.UDP if selection.OpenVPN.TCP { @@ -24,10 +24,11 @@ func (i *Ipvanish) GetOpenVPNConnection(selection configuration.ServerSelection) return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -38,8 +39,8 @@ func (i *Ipvanish) GetOpenVPNConnection(selection configuration.ServerSelection) } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, i.randSource), nil + return utils.PickRandomConnection(connections, i.randSource), nil } diff --git a/internal/provider/ipvanish/openvpnconf.go b/internal/provider/ipvanish/openvpnconf.go index b6db96f2..5ee0455e 100644 --- a/internal/provider/ipvanish/openvpnconf.go +++ b/internal/provider/ipvanish/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (i *Ipvanish) BuildConf(connection models.OpenVPNConnection, +func (i *Ipvanish) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -42,7 +42,7 @@ func (i *Ipvanish) BuildConf(connection models.OpenVPNConnection, "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, "proto " + connection.Protocol, - connection.RemoteLine(), + connection.OpenVPNRemoteLine(), "verify-x509-name " + connection.Hostname + " name", "auth " + settings.Auth, } diff --git a/internal/provider/ivpn/connection.go b/internal/provider/ivpn/connection.go index 9ec16c9d..e422604c 100644 --- a/internal/provider/ivpn/connection.go +++ b/internal/provider/ivpn/connection.go @@ -11,8 +11,8 @@ import ( var ErrProtocolUnsupported = errors.New("network protocol is not supported") -func (i *Ivpn) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (i *Ivpn) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { const port = 2049 const protocol = constants.UDP if selection.OpenVPN.TCP { @@ -24,10 +24,11 @@ func (i *Ivpn) GetOpenVPNConnection(selection configuration.ServerSelection) ( return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -38,8 +39,8 @@ func (i *Ivpn) GetOpenVPNConnection(selection configuration.ServerSelection) ( } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, i.randSource), nil + return utils.PickRandomConnection(connections, i.randSource), nil } diff --git a/internal/provider/ivpn/openvpnconf.go b/internal/provider/ivpn/openvpnconf.go index afd28681..bcf4a88d 100644 --- a/internal/provider/ivpn/openvpnconf.go +++ b/internal/provider/ivpn/openvpnconf.go @@ -10,7 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (i *Ivpn) BuildConf(connection models.OpenVPNConnection, +func (i *Ivpn) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -45,7 +45,7 @@ func (i *Ivpn) BuildConf(connection models.OpenVPNConnection, "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, "proto " + connection.Protocol, - connection.RemoteLine(), + connection.OpenVPNRemoteLine(), "verify-x509-name " + namePrefix + " name-prefix", } diff --git a/internal/provider/mullvad/connection.go b/internal/provider/mullvad/connection.go index adaeb078..f5fe0471 100644 --- a/internal/provider/mullvad/connection.go +++ b/internal/provider/mullvad/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (m *Mullvad) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (m *Mullvad) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { var port uint16 = 1194 protocol := constants.UDP if selection.OpenVPN.TCP { @@ -25,10 +25,11 @@ func (m *Mullvad) GetOpenVPNConnection(selection configuration.ServerSelection) return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -38,8 +39,8 @@ func (m *Mullvad) GetOpenVPNConnection(selection configuration.ServerSelection) } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, m.randSource), nil + return utils.PickRandomConnection(connections, m.randSource), nil } diff --git a/internal/provider/mullvad/openvpnconf.go b/internal/provider/mullvad/openvpnconf.go index 7bfb3aca..1a1c98aa 100644 --- a/internal/provider/mullvad/openvpnconf.go +++ b/internal/provider/mullvad/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (m *Mullvad) BuildConf(connection models.OpenVPNConnection, +func (m *Mullvad) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -42,8 +42,8 @@ func (m *Mullvad) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), } lines = append(lines, utils.CipherLines(settings.Cipher, settings.Version)...) diff --git a/internal/provider/nordvpn/connection.go b/internal/provider/nordvpn/connection.go index 6fb09369..7cc04e7c 100644 --- a/internal/provider/nordvpn/connection.go +++ b/internal/provider/nordvpn/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (n *Nordvpn) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (n *Nordvpn) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { var port uint16 = 1194 protocol := constants.UDP if selection.OpenVPN.TCP { @@ -21,9 +21,10 @@ func (n *Nordvpn) GetOpenVPNConnection(selection configuration.ServerSelection) return connection, err } - connections := make([]models.OpenVPNConnection, len(servers)) + connections := make([]models.Connection, len(servers)) for i := range servers { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: servers[i].IP, Port: port, Protocol: protocol, @@ -32,8 +33,8 @@ func (n *Nordvpn) GetOpenVPNConnection(selection configuration.ServerSelection) } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, n.randSource), nil + return utils.PickRandomConnection(connections, n.randSource), nil } diff --git a/internal/provider/nordvpn/openvpnconf.go b/internal/provider/nordvpn/openvpnconf.go index af080303..601f827a 100644 --- a/internal/provider/nordvpn/openvpnconf.go +++ b/internal/provider/nordvpn/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (n *Nordvpn) BuildConf(connection models.OpenVPNConnection, +func (n *Nordvpn) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -52,8 +52,8 @@ func (n *Nordvpn) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, } diff --git a/internal/provider/privado/connection.go b/internal/provider/privado/connection.go index c308c797..8f5d5c63 100644 --- a/internal/provider/privado/connection.go +++ b/internal/provider/privado/connection.go @@ -12,8 +12,8 @@ import ( var ErrProtocolUnsupported = errors.New("network protocol is not supported") -func (p *Privado) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (p *Privado) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { const port = 1194 const protocol = constants.UDP if selection.OpenVPN.TCP { @@ -25,9 +25,10 @@ func (p *Privado) GetOpenVPNConnection(selection configuration.ServerSelection) return connection, err } - connections := make([]models.OpenVPNConnection, len(servers)) + connections := make([]models.Connection, len(servers)) for i := range servers { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: servers[i].IP, Port: port, Protocol: protocol, @@ -37,8 +38,8 @@ func (p *Privado) GetOpenVPNConnection(selection configuration.ServerSelection) } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, p.randSource), nil + return utils.PickRandomConnection(connections, p.randSource), nil } diff --git a/internal/provider/privado/openvpnconf.go b/internal/provider/privado/openvpnconf.go index 78b89a44..b5985751 100644 --- a/internal/provider/privado/openvpnconf.go +++ b/internal/provider/privado/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *Privado) BuildConf(connection models.OpenVPNConnection, +func (p *Privado) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -43,8 +43,8 @@ func (p *Privado) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, } diff --git a/internal/provider/privateinternetaccess/connection.go b/internal/provider/privateinternetaccess/connection.go index 656bcdd4..33de8e80 100644 --- a/internal/provider/privateinternetaccess/connection.go +++ b/internal/provider/privateinternetaccess/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *PIA) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (p *PIA) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { protocol := constants.UDP if selection.OpenVPN.TCP { protocol = constants.TCP @@ -24,10 +24,11 @@ func (p *PIA) GetOpenVPNConnection(selection configuration.ServerSelection) ( return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -38,9 +39,9 @@ func (p *PIA) GetOpenVPNConnection(selection configuration.ServerSelection) ( } if selection.TargetIP != nil { - connection, err = utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + connection, err = utils.GetTargetIPConnection(connections, selection.TargetIP) } else { - connection, err = utils.PickRandomOpenVPNConnection(connections, p.randSource), nil + connection, err = utils.PickRandomConnection(connections, p.randSource), nil } if err != nil { diff --git a/internal/provider/privateinternetaccess/openvpnconf.go b/internal/provider/privateinternetaccess/openvpnconf.go index 2f1b105a..5bfa1c0b 100644 --- a/internal/provider/privateinternetaccess/openvpnconf.go +++ b/internal/provider/privateinternetaccess/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *PIA) BuildConf(connection models.OpenVPNConnection, +func (p *PIA) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { var defaultCipher, defaultAuth, X509CRL, certificate string switch settings.EncPreset { @@ -61,8 +61,8 @@ func (p *PIA) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), } if settings.Cipher != "" { diff --git a/internal/provider/privatevpn/connection.go b/internal/provider/privatevpn/connection.go index 6d6b5dd1..44d39c36 100644 --- a/internal/provider/privatevpn/connection.go +++ b/internal/provider/privatevpn/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *Privatevpn) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (p *Privatevpn) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { protocol := constants.UDP var port uint16 = 1194 if selection.OpenVPN.TCP { @@ -21,10 +21,11 @@ func (p *Privatevpn) GetOpenVPNConnection(selection configuration.ServerSelectio return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, ip := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: ip, Port: port, Protocol: protocol, @@ -34,8 +35,8 @@ func (p *Privatevpn) GetOpenVPNConnection(selection configuration.ServerSelectio } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, p.randSource), nil + return utils.PickRandomConnection(connections, p.randSource), nil } diff --git a/internal/provider/privatevpn/openvpnconf.go b/internal/provider/privatevpn/openvpnconf.go index 4aac81a6..70bce0a4 100644 --- a/internal/provider/privatevpn/openvpnconf.go +++ b/internal/provider/privatevpn/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *Privatevpn) BuildConf(connection models.OpenVPNConnection, +func (p *Privatevpn) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES128gcm @@ -40,8 +40,8 @@ func (p *Privatevpn) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, } diff --git a/internal/provider/protonvpn/connection.go b/internal/provider/protonvpn/connection.go index 1f89b83a..3ac1b02d 100644 --- a/internal/provider/protonvpn/connection.go +++ b/internal/provider/protonvpn/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *Protonvpn) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (p *Protonvpn) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { protocol := constants.UDP if selection.OpenVPN.TCP { protocol = constants.TCP @@ -24,9 +24,10 @@ func (p *Protonvpn) GetOpenVPNConnection(selection configuration.ServerSelection return connection, err } - connections := make([]models.OpenVPNConnection, len(servers)) + connections := make([]models.Connection, len(servers)) for i := range servers { - connections[i] = models.OpenVPNConnection{ + connections[i] = models.Connection{ + Type: selection.VPN, IP: servers[i].EntryIP, Port: port, Protocol: protocol, @@ -34,8 +35,8 @@ func (p *Protonvpn) GetOpenVPNConnection(selection configuration.ServerSelection } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, p.randSource), nil + return utils.PickRandomConnection(connections, p.randSource), nil } diff --git a/internal/provider/protonvpn/openvpnconf.go b/internal/provider/protonvpn/openvpnconf.go index 54a0e0ee..6f69a69b 100644 --- a/internal/provider/protonvpn/openvpnconf.go +++ b/internal/provider/protonvpn/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *Protonvpn) BuildConf(connection models.OpenVPNConnection, +func (p *Protonvpn) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -51,8 +51,8 @@ func (p *Protonvpn) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, } diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 96153983..6ede2f80 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -33,8 +33,8 @@ import ( // Provider contains methods to read and modify the openvpn configuration to connect as a client. type Provider interface { - GetOpenVPNConnection(selection configuration.ServerSelection) (connection models.OpenVPNConnection, err error) - BuildConf(connection models.OpenVPNConnection, settings configuration.OpenVPN) (lines []string) + GetConnection(selection configuration.ServerSelection) (connection models.Connection, err error) + BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) PortForwarder } diff --git a/internal/provider/purevpn/connection.go b/internal/provider/purevpn/connection.go index 5fc4ce74..1837d0e8 100644 --- a/internal/provider/purevpn/connection.go +++ b/internal/provider/purevpn/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *Purevpn) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (p *Purevpn) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { protocol := constants.UDP var port uint16 = 53 if selection.OpenVPN.TCP { @@ -21,10 +21,11 @@ func (p *Purevpn) GetOpenVPNConnection(selection configuration.ServerSelection) return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -34,8 +35,8 @@ func (p *Purevpn) GetOpenVPNConnection(selection configuration.ServerSelection) } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, p.randSource), nil + return utils.PickRandomConnection(connections, p.randSource), nil } diff --git a/internal/provider/purevpn/openvpnconf.go b/internal/provider/purevpn/openvpnconf.go index 25fb227c..1433a0a0 100644 --- a/internal/provider/purevpn/openvpnconf.go +++ b/internal/provider/purevpn/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *Purevpn) BuildConf(connection models.OpenVPNConnection, +func (p *Purevpn) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256gcm @@ -44,8 +44,8 @@ func (p *Purevpn) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), } lines = append(lines, utils.CipherLines(settings.Cipher, settings.Version)...) diff --git a/internal/provider/surfshark/connection.go b/internal/provider/surfshark/connection.go index eb084866..2da549ad 100644 --- a/internal/provider/surfshark/connection.go +++ b/internal/provider/surfshark/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (s *Surfshark) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (s *Surfshark) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { protocol := constants.UDP var port uint16 = 1194 if selection.OpenVPN.TCP { @@ -21,10 +21,11 @@ func (s *Surfshark) GetOpenVPNConnection(selection configuration.ServerSelection return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -34,8 +35,8 @@ func (s *Surfshark) GetOpenVPNConnection(selection configuration.ServerSelection } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, s.randSource), nil + return utils.PickRandomConnection(connections, s.randSource), nil } diff --git a/internal/provider/surfshark/openvpnconf.go b/internal/provider/surfshark/openvpnconf.go index 296c5b62..a4f11d54 100644 --- a/internal/provider/surfshark/openvpnconf.go +++ b/internal/provider/surfshark/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (s *Surfshark) BuildConf(connection models.OpenVPNConnection, +func (s *Surfshark) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256gcm @@ -53,8 +53,8 @@ func (s *Surfshark) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, } diff --git a/internal/provider/torguard/connection.go b/internal/provider/torguard/connection.go index 658e0313..f5e4e7d5 100644 --- a/internal/provider/torguard/connection.go +++ b/internal/provider/torguard/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (t *Torguard) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (t *Torguard) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { protocol := constants.UDP if selection.OpenVPN.TCP { protocol = constants.TCP @@ -24,10 +24,11 @@ func (t *Torguard) GetOpenVPNConnection(selection configuration.ServerSelection) return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -37,8 +38,8 @@ func (t *Torguard) GetOpenVPNConnection(selection configuration.ServerSelection) } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, t.randSource), nil + return utils.PickRandomConnection(connections, t.randSource), nil } diff --git a/internal/provider/torguard/openvpnconf.go b/internal/provider/torguard/openvpnconf.go index c7d39eac..c3d06581 100644 --- a/internal/provider/torguard/openvpnconf.go +++ b/internal/provider/torguard/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (t *Torguard) BuildConf(connection models.OpenVPNConnection, +func (t *Torguard) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256gcm @@ -55,8 +55,8 @@ func (t *Torguard) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, } diff --git a/internal/provider/utils/pick.go b/internal/provider/utils/pick.go index 39edab97..71d67d21 100644 --- a/internal/provider/utils/pick.go +++ b/internal/provider/utils/pick.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/models" ) -func PickRandomOpenVPNConnection(connections []models.OpenVPNConnection, - source rand.Source) models.OpenVPNConnection { +func PickRandomConnection(connections []models.Connection, + source rand.Source) models.Connection { return connections[rand.New(source).Intn(len(connections))] //nolint:gosec } diff --git a/internal/provider/utils/pick_test.go b/internal/provider/utils/pick_test.go index a6ba6cb2..6f14d95f 100644 --- a/internal/provider/utils/pick_test.go +++ b/internal/provider/utils/pick_test.go @@ -8,19 +8,19 @@ import ( "github.com/stretchr/testify/assert" ) -func Test_PickRandomOpenVPNConnection(t *testing.T) { +func Test_PickRandomConnection(t *testing.T) { t.Parallel() - connections := []models.OpenVPNConnection{ + connections := []models.Connection{ {Port: 1}, {Port: 2}, {Port: 3}, {Port: 4}, } source := rand.NewSource(0) - connection := PickRandomOpenVPNConnection(connections, source) - assert.Equal(t, models.OpenVPNConnection{Port: 3}, connection) + connection := PickRandomConnection(connections, source) + assert.Equal(t, models.Connection{Port: 3}, connection) - connection = PickRandomOpenVPNConnection(connections, source) - assert.Equal(t, models.OpenVPNConnection{Port: 3}, connection) + connection = PickRandomConnection(connections, source) + assert.Equal(t, models.Connection{Port: 3}, connection) - connection = PickRandomOpenVPNConnection(connections, source) - assert.Equal(t, models.OpenVPNConnection{Port: 2}, connection) + connection = PickRandomConnection(connections, source) + assert.Equal(t, models.Connection{Port: 2}, connection) } diff --git a/internal/provider/utils/targetip.go b/internal/provider/utils/targetip.go index fc002d93..23107cdc 100644 --- a/internal/provider/utils/targetip.go +++ b/internal/provider/utils/targetip.go @@ -10,8 +10,8 @@ import ( var ErrTargetIPNotFound = errors.New("target IP address not found") -func GetTargetIPOpenVPNConnection(connections []models.OpenVPNConnection, - targetIP net.IP) (connection models.OpenVPNConnection, err error) { +func GetTargetIPConnection(connections []models.Connection, + targetIP net.IP) (connection models.Connection, err error) { for _, connection := range connections { if targetIP.Equal(connection.IP) { return connection, nil diff --git a/internal/provider/vpnunlimited/connection.go b/internal/provider/vpnunlimited/connection.go index 7faba67f..f09f7e2e 100644 --- a/internal/provider/vpnunlimited/connection.go +++ b/internal/provider/vpnunlimited/connection.go @@ -11,8 +11,8 @@ import ( var ErrProtocolUnsupported = errors.New("network protocol is not supported") -func (p *Provider) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (p *Provider) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { const port = 1194 const protocol = constants.UDP if selection.OpenVPN.TCP { @@ -24,10 +24,11 @@ func (p *Provider) GetOpenVPNConnection(selection configuration.ServerSelection) return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -37,8 +38,8 @@ func (p *Provider) GetOpenVPNConnection(selection configuration.ServerSelection) } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, p.randSource), nil + return utils.PickRandomConnection(connections, p.randSource), nil } diff --git a/internal/provider/vpnunlimited/openvpnconf.go b/internal/provider/vpnunlimited/openvpnconf.go index 06e2bf7c..76924a7c 100644 --- a/internal/provider/vpnunlimited/openvpnconf.go +++ b/internal/provider/vpnunlimited/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (p *Provider) BuildConf(connection models.OpenVPNConnection, +func (p *Provider) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { lines = []string{ "client", @@ -35,8 +35,8 @@ func (p *Provider) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), } if settings.Cipher != "" { diff --git a/internal/provider/vyprvpn/connection.go b/internal/provider/vyprvpn/connection.go index 76983ffa..6babf608 100644 --- a/internal/provider/vyprvpn/connection.go +++ b/internal/provider/vyprvpn/connection.go @@ -12,8 +12,8 @@ import ( var ErrProtocolUnsupported = errors.New("network protocol is not supported") -func (v *Vyprvpn) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (v *Vyprvpn) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { const port = 443 const protocol = constants.UDP if selection.OpenVPN.TCP { @@ -25,10 +25,11 @@ func (v *Vyprvpn) GetOpenVPNConnection(selection configuration.ServerSelection) return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -38,8 +39,8 @@ func (v *Vyprvpn) GetOpenVPNConnection(selection configuration.ServerSelection) } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, v.randSource), nil + return utils.PickRandomConnection(connections, v.randSource), nil } diff --git a/internal/provider/vyprvpn/openvpnconf.go b/internal/provider/vyprvpn/openvpnconf.go index 5a298c32..53118de1 100644 --- a/internal/provider/vyprvpn/openvpnconf.go +++ b/internal/provider/vyprvpn/openvpnconf.go @@ -9,7 +9,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (v *Vyprvpn) BuildConf(connection models.OpenVPNConnection, +func (v *Vyprvpn) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -45,8 +45,8 @@ func (v *Vyprvpn) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, } diff --git a/internal/provider/windscribe/connection.go b/internal/provider/windscribe/connection.go index db7501ff..88986000 100644 --- a/internal/provider/windscribe/connection.go +++ b/internal/provider/windscribe/connection.go @@ -7,8 +7,8 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (w *Windscribe) GetOpenVPNConnection(selection configuration.ServerSelection) ( - connection models.OpenVPNConnection, err error) { +func (w *Windscribe) GetConnection(selection configuration.ServerSelection) ( + connection models.Connection, err error) { protocol := constants.UDP var port uint16 = 443 if selection.OpenVPN.TCP { @@ -25,10 +25,11 @@ func (w *Windscribe) GetOpenVPNConnection(selection configuration.ServerSelectio return connection, err } - var connections []models.OpenVPNConnection + var connections []models.Connection for _, server := range servers { for _, IP := range server.IPs { - connection := models.OpenVPNConnection{ + connection := models.Connection{ + Type: selection.VPN, IP: IP, Port: port, Protocol: protocol, @@ -39,8 +40,8 @@ func (w *Windscribe) GetOpenVPNConnection(selection configuration.ServerSelectio } if selection.TargetIP != nil { - return utils.GetTargetIPOpenVPNConnection(connections, selection.TargetIP) + return utils.GetTargetIPConnection(connections, selection.TargetIP) } - return utils.PickRandomOpenVPNConnection(connections, w.randSource), nil + return utils.PickRandomConnection(connections, w.randSource), nil } diff --git a/internal/provider/windscribe/openvpnconf.go b/internal/provider/windscribe/openvpnconf.go index 7aeca03f..519b76b0 100644 --- a/internal/provider/windscribe/openvpnconf.go +++ b/internal/provider/windscribe/openvpnconf.go @@ -10,7 +10,7 @@ import ( "github.com/qdm12/gluetun/internal/provider/utils" ) -func (w *Windscribe) BuildConf(connection models.OpenVPNConnection, +func (w *Windscribe) BuildConf(connection models.Connection, settings configuration.OpenVPN) (lines []string) { if settings.Cipher == "" { settings.Cipher = constants.AES256cbc @@ -47,8 +47,8 @@ func (w *Windscribe) BuildConf(connection models.OpenVPNConnection, // Modified variables "verb " + strconv.Itoa(settings.Verbosity), "auth-user-pass " + constants.OpenVPNAuthConf, - connection.ProtoLine(), - connection.RemoteLine(), + connection.OpenVPNProtoLine(), + connection.OpenVPNRemoteLine(), "auth " + settings.Auth, "verify-x509-name " + connection.Hostname + " name", } diff --git a/internal/vpn/openvpn.go b/internal/vpn/openvpn.go index d8475ba9..f5a2346e 100644 --- a/internal/vpn/openvpn.go +++ b/internal/vpn/openvpn.go @@ -26,10 +26,10 @@ func setupOpenVPN(ctx context.Context, fw firewall.VPNConnectionSetter, openvpnConf openvpn.Interface, providerConf provider.Provider, openVPNSettings configuration.OpenVPN, providerSettings configuration.Provider) ( serverName string, err error) { - var connection models.OpenVPNConnection + var connection models.Connection var lines []string if openVPNSettings.Config == "" { - connection, err = providerConf.GetOpenVPNConnection(providerSettings.ServerSelection) + connection, err = providerConf.GetConnection(providerSettings.ServerSelection) if err == nil { lines = providerConf.BuildConf(connection, openVPNSettings) }