diff --git a/internal/models/server.go b/internal/models/server.go index 7b1e41f8..03515fe5 100644 --- a/internal/models/server.go +++ b/internal/models/server.go @@ -2,6 +2,8 @@ package models import ( "net" + + "github.com/qdm12/gluetun/internal/constants/vpn" ) type Server struct { @@ -26,3 +28,15 @@ type Server struct { PortForward bool `json:"port_forward,omitempty"` IPs []net.IP `json:"ips,omitempty"` } + +func (s *Server) setDefaults() { + // TODO v4 precise these in servers.json rather than here + if s.VPN == "" { + s.VPN = vpn.OpenVPN + } + + if s.VPN == vpn.Wireguard { + s.UDP = true + s.TCP = false + } +} diff --git a/internal/models/servers.go b/internal/models/servers.go index f72b15ab..8bca6f6c 100644 --- a/internal/models/servers.go +++ b/internal/models/servers.go @@ -47,8 +47,37 @@ func (a *AllServers) Count() int { len(a.Windscribe.Servers) } +func (a *AllServers) SetDefaults() { + a.Cyberghost.SetDefaults() + a.Expressvpn.SetDefaults() + a.Fastestvpn.SetDefaults() + a.HideMyAss.SetDefaults() + a.Ipvanish.SetDefaults() + a.Ivpn.SetDefaults() + a.Mullvad.SetDefaults() + a.Nordvpn.SetDefaults() + a.Perfectprivacy.SetDefaults() + a.Privado.SetDefaults() + a.Pia.SetDefaults() + a.Privatevpn.SetDefaults() + a.Protonvpn.SetDefaults() + a.Purevpn.SetDefaults() + a.Surfshark.SetDefaults() + a.Torguard.SetDefaults() + a.VPNUnlimited.SetDefaults() + a.Vyprvpn.SetDefaults() + a.Wevpn.SetDefaults() + a.Windscribe.SetDefaults() +} + type Servers struct { Version uint16 `json:"version"` Timestamp int64 `json:"timestamp"` Servers []Server `json:"servers"` } + +func (s *Servers) SetDefaults() { + for i := range s.Servers { + s.Servers[i].setDefaults() + } +} diff --git a/internal/storage/read.go b/internal/storage/read.go index 93a44208..f56e5d88 100644 --- a/internal/storage/read.go +++ b/internal/storage/read.go @@ -204,6 +204,7 @@ func (s *Storage) extractServersFromBytes(b []byte, hardcoded models.AllServers) if err != nil { return servers, err } + element.target.SetDefaults() } return servers, nil diff --git a/internal/storage/storage.go b/internal/storage/storage.go index 6a0c72aa..ad830fc4 100644 --- a/internal/storage/storage.go +++ b/internal/storage/storage.go @@ -24,6 +24,7 @@ type InfoErrorer interface { func New(logger InfoErrorer, filepath string) (storage *Storage, err error) { // error returned covered by unit test harcodedServers, _ := parseHardcodedServers() + harcodedServers.SetDefaults() storage = &Storage{ hardcodedServers: harcodedServers,