chore(models): common Server & Servers for all providers (#943)

This commit is contained in:
Quentin McGaw
2022-04-16 22:25:36 +02:00
parent aa729515b9
commit 5d66c193aa
148 changed files with 27081 additions and 27795 deletions
+20 -20
View File
@@ -67,45 +67,45 @@ func (c *CLI) FormatServers(args []string) error {
var formatted string
switch {
case cyberghost:
formatted = currentServers.Cyberghost.ToMarkdown()
formatted = currentServers.Cyberghost.ToMarkdown(providers.Cyberghost)
case expressvpn:
formatted = currentServers.Expressvpn.ToMarkdown()
formatted = currentServers.Expressvpn.ToMarkdown(providers.Expressvpn)
case fastestvpn:
formatted = currentServers.Fastestvpn.ToMarkdown()
formatted = currentServers.Fastestvpn.ToMarkdown(providers.Fastestvpn)
case hideMyAss:
formatted = currentServers.HideMyAss.ToMarkdown()
formatted = currentServers.HideMyAss.ToMarkdown(providers.HideMyAss)
case ipvanish:
formatted = currentServers.Ipvanish.ToMarkdown()
formatted = currentServers.Ipvanish.ToMarkdown(providers.Ipvanish)
case ivpn:
formatted = currentServers.Ivpn.ToMarkdown()
formatted = currentServers.Ivpn.ToMarkdown(providers.Ivpn)
case mullvad:
formatted = currentServers.Mullvad.ToMarkdown()
formatted = currentServers.Mullvad.ToMarkdown(providers.Mullvad)
case nordvpn:
formatted = currentServers.Nordvpn.ToMarkdown()
formatted = currentServers.Nordvpn.ToMarkdown(providers.Nordvpn)
case perfectPrivacy:
formatted = currentServers.Perfectprivacy.ToMarkdown()
formatted = currentServers.Perfectprivacy.ToMarkdown(providers.Perfectprivacy)
case pia:
formatted = currentServers.Pia.ToMarkdown()
formatted = currentServers.Pia.ToMarkdown(providers.PrivateInternetAccess)
case privado:
formatted = currentServers.Privado.ToMarkdown()
formatted = currentServers.Privado.ToMarkdown(providers.Privado)
case privatevpn:
formatted = currentServers.Privatevpn.ToMarkdown()
formatted = currentServers.Privatevpn.ToMarkdown(providers.Privatevpn)
case protonvpn:
formatted = currentServers.Protonvpn.ToMarkdown()
formatted = currentServers.Protonvpn.ToMarkdown(providers.Protonvpn)
case purevpn:
formatted = currentServers.Purevpn.ToMarkdown()
formatted = currentServers.Purevpn.ToMarkdown(providers.Purevpn)
case surfshark:
formatted = currentServers.Surfshark.ToMarkdown()
formatted = currentServers.Surfshark.ToMarkdown(providers.Surfshark)
case torguard:
formatted = currentServers.Torguard.ToMarkdown()
formatted = currentServers.Torguard.ToMarkdown(providers.Torguard)
case vpnUnlimited:
formatted = currentServers.VPNUnlimited.ToMarkdown()
formatted = currentServers.VPNUnlimited.ToMarkdown(providers.VPNUnlimited)
case vyprvpn:
formatted = currentServers.Vyprvpn.ToMarkdown()
formatted = currentServers.Vyprvpn.ToMarkdown(providers.Vyprvpn)
case wevpn:
formatted = currentServers.Wevpn.ToMarkdown()
formatted = currentServers.Wevpn.ToMarkdown(providers.Wevpn)
case windscribe:
formatted = currentServers.Windscribe.ToMarkdown()
formatted = currentServers.Windscribe.ToMarkdown(providers.Windscribe)
default:
return ErrProviderUnspecified
}
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func CyberghostCountryChoices(servers []models.CyberghostServer) (choices []string) {
func CyberghostCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -12,7 +12,7 @@ func CyberghostCountryChoices(servers []models.CyberghostServer) (choices []stri
return makeUnique(choices)
}
func CyberghostHostnameChoices(servers []models.CyberghostServer) (choices []string) {
func CyberghostHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func ExpressvpnCountriesChoices(servers []models.ExpressvpnServer) (choices []string) {
func ExpressvpnCountriesChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -12,7 +12,7 @@ func ExpressvpnCountriesChoices(servers []models.ExpressvpnServer) (choices []st
return makeUnique(choices)
}
func ExpressvpnCityChoices(servers []models.ExpressvpnServer) (choices []string) {
func ExpressvpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -20,7 +20,7 @@ func ExpressvpnCityChoices(servers []models.ExpressvpnServer) (choices []string)
return makeUnique(choices)
}
func ExpressvpnHostnameChoices(servers []models.ExpressvpnServer) (choices []string) {
func ExpressvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func FastestvpnCountriesChoices(servers []models.FastestvpnServer) (choices []string) {
func FastestvpnCountriesChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -12,7 +12,7 @@ func FastestvpnCountriesChoices(servers []models.FastestvpnServer) (choices []st
return makeUnique(choices)
}
func FastestvpnHostnameChoices(servers []models.FastestvpnServer) (choices []string) {
func FastestvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func HideMyAssCountryChoices(servers []models.HideMyAssServer) (choices []string) {
func HideMyAssCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -12,7 +12,7 @@ func HideMyAssCountryChoices(servers []models.HideMyAssServer) (choices []string
return makeUnique(choices)
}
func HideMyAssRegionChoices(servers []models.HideMyAssServer) (choices []string) {
func HideMyAssRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
@@ -20,7 +20,7 @@ func HideMyAssRegionChoices(servers []models.HideMyAssServer) (choices []string)
return makeUnique(choices)
}
func HideMyAssCityChoices(servers []models.HideMyAssServer) (choices []string) {
func HideMyAssCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -28,7 +28,7 @@ func HideMyAssCityChoices(servers []models.HideMyAssServer) (choices []string) {
return makeUnique(choices)
}
func HideMyAssHostnameChoices(servers []models.HideMyAssServer) (choices []string) {
func HideMyAssHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func IpvanishCountryChoices(servers []models.IpvanishServer) (choices []string) {
func IpvanishCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -12,7 +12,7 @@ func IpvanishCountryChoices(servers []models.IpvanishServer) (choices []string)
return makeUnique(choices)
}
func IpvanishCityChoices(servers []models.IpvanishServer) (choices []string) {
func IpvanishCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -20,7 +20,7 @@ func IpvanishCityChoices(servers []models.IpvanishServer) (choices []string) {
return makeUnique(choices)
}
func IpvanishHostnameChoices(servers []models.IpvanishServer) (choices []string) {
func IpvanishHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func IvpnCountryChoices(servers []models.IvpnServer) (choices []string) {
func IvpnCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -12,7 +12,7 @@ func IvpnCountryChoices(servers []models.IvpnServer) (choices []string) {
return makeUnique(choices)
}
func IvpnCityChoices(servers []models.IvpnServer) (choices []string) {
func IvpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -20,7 +20,7 @@ func IvpnCityChoices(servers []models.IvpnServer) (choices []string) {
return makeUnique(choices)
}
func IvpnISPChoices(servers []models.IvpnServer) (choices []string) {
func IvpnISPChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].ISP
@@ -28,7 +28,7 @@ func IvpnISPChoices(servers []models.IvpnServer) (choices []string) {
return makeUnique(choices)
}
func IvpnHostnameChoices(servers []models.IvpnServer) (choices []string) {
func IvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func MullvadCountryChoices(servers []models.MullvadServer) (choices []string) {
func MullvadCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -12,7 +12,7 @@ func MullvadCountryChoices(servers []models.MullvadServer) (choices []string) {
return makeUnique(choices)
}
func MullvadCityChoices(servers []models.MullvadServer) (choices []string) {
func MullvadCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -20,7 +20,7 @@ func MullvadCityChoices(servers []models.MullvadServer) (choices []string) {
return makeUnique(choices)
}
func MullvadHostnameChoices(servers []models.MullvadServer) (choices []string) {
func MullvadHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -28,7 +28,7 @@ func MullvadHostnameChoices(servers []models.MullvadServer) (choices []string) {
return makeUnique(choices)
}
func MullvadISPChoices(servers []models.MullvadServer) (choices []string) {
func MullvadISPChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].ISP
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func NordvpnRegionChoices(servers []models.NordvpnServer) (choices []string) {
func NordvpnRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
@@ -12,7 +12,7 @@ func NordvpnRegionChoices(servers []models.NordvpnServer) (choices []string) {
return makeUnique(choices)
}
func NordvpnHostnameChoices(servers []models.NordvpnServer) (choices []string) {
func NordvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func PerfectprivacyCityChoices(servers []models.PerfectprivacyServer) (choices []string) {
func PerfectprivacyCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func PIAGeoChoices(servers []models.PIAServer) (choices []string) {
func PIAGeoChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
@@ -12,7 +12,7 @@ func PIAGeoChoices(servers []models.PIAServer) (choices []string) {
return makeUnique(choices)
}
func PIAHostnameChoices(servers []models.PIAServer) (choices []string) {
func PIAHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -20,7 +20,7 @@ func PIAHostnameChoices(servers []models.PIAServer) (choices []string) {
return makeUnique(choices)
}
func PIANameChoices(servers []models.PIAServer) (choices []string) {
func PIANameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].ServerName
@@ -2,7 +2,7 @@ package validation
import "github.com/qdm12/gluetun/internal/models"
func PrivadoCountryChoices(servers []models.PrivadoServer) (choices []string) {
func PrivadoCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -10,7 +10,7 @@ func PrivadoCountryChoices(servers []models.PrivadoServer) (choices []string) {
return makeUnique(choices)
}
func PrivadoRegionChoices(servers []models.PrivadoServer) (choices []string) {
func PrivadoRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
@@ -18,7 +18,7 @@ func PrivadoRegionChoices(servers []models.PrivadoServer) (choices []string) {
return makeUnique(choices)
}
func PrivadoCityChoices(servers []models.PrivadoServer) (choices []string) {
func PrivadoCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -26,7 +26,7 @@ func PrivadoCityChoices(servers []models.PrivadoServer) (choices []string) {
return makeUnique(choices)
}
func PrivadoHostnameChoices(servers []models.PrivadoServer) (choices []string) {
func PrivadoHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -2,7 +2,7 @@ package validation
import "github.com/qdm12/gluetun/internal/models"
func PrivatevpnCountryChoices(servers []models.PrivatevpnServer) (choices []string) {
func PrivatevpnCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -10,7 +10,7 @@ func PrivatevpnCountryChoices(servers []models.PrivatevpnServer) (choices []stri
return makeUnique(choices)
}
func PrivatevpnCityChoices(servers []models.PrivatevpnServer) (choices []string) {
func PrivatevpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -18,7 +18,7 @@ func PrivatevpnCityChoices(servers []models.PrivatevpnServer) (choices []string)
return makeUnique(choices)
}
func PrivatevpnHostnameChoices(servers []models.PrivatevpnServer) (choices []string) {
func PrivatevpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -2,7 +2,7 @@ package validation
import "github.com/qdm12/gluetun/internal/models"
func ProtonvpnCountryChoices(servers []models.ProtonvpnServer) (choices []string) {
func ProtonvpnCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -10,7 +10,7 @@ func ProtonvpnCountryChoices(servers []models.ProtonvpnServer) (choices []string
return makeUnique(choices)
}
func ProtonvpnRegionChoices(servers []models.ProtonvpnServer) (choices []string) {
func ProtonvpnRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
@@ -18,7 +18,7 @@ func ProtonvpnRegionChoices(servers []models.ProtonvpnServer) (choices []string)
return makeUnique(choices)
}
func ProtonvpnCityChoices(servers []models.ProtonvpnServer) (choices []string) {
func ProtonvpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -26,15 +26,15 @@ func ProtonvpnCityChoices(servers []models.ProtonvpnServer) (choices []string) {
return makeUnique(choices)
}
func ProtonvpnNameChoices(servers []models.ProtonvpnServer) (choices []string) {
func ProtonvpnNameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Name
choices[i] = servers[i].ServerName
}
return makeUnique(choices)
}
func ProtonvpnHostnameChoices(servers []models.ProtonvpnServer) (choices []string) {
func ProtonvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -2,7 +2,7 @@ package validation
import "github.com/qdm12/gluetun/internal/models"
func PurevpnRegionChoices(servers []models.PurevpnServer) (choices []string) {
func PurevpnRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
@@ -10,7 +10,7 @@ func PurevpnRegionChoices(servers []models.PurevpnServer) (choices []string) {
return makeUnique(choices)
}
func PurevpnCountryChoices(servers []models.PurevpnServer) (choices []string) {
func PurevpnCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -18,7 +18,7 @@ func PurevpnCountryChoices(servers []models.PurevpnServer) (choices []string) {
return makeUnique(choices)
}
func PurevpnCityChoices(servers []models.PurevpnServer) (choices []string) {
func PurevpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -26,7 +26,7 @@ func PurevpnCityChoices(servers []models.PurevpnServer) (choices []string) {
return makeUnique(choices)
}
func PurevpnHostnameChoices(servers []models.PurevpnServer) (choices []string) {
func PurevpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -7,7 +7,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func SurfsharkRegionChoices(servers []models.SurfsharkServer) (choices []string) {
func SurfsharkRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
@@ -15,7 +15,7 @@ func SurfsharkRegionChoices(servers []models.SurfsharkServer) (choices []string)
return makeUnique(choices)
}
func SurfsharkCountryChoices(servers []models.SurfsharkServer) (choices []string) {
func SurfsharkCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -23,7 +23,7 @@ func SurfsharkCountryChoices(servers []models.SurfsharkServer) (choices []string
return makeUnique(choices)
}
func SurfsharkCityChoices(servers []models.SurfsharkServer) (choices []string) {
func SurfsharkCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -31,7 +31,7 @@ func SurfsharkCityChoices(servers []models.SurfsharkServer) (choices []string) {
return makeUnique(choices)
}
func SurfsharkHostnameChoices(servers []models.SurfsharkServer) (choices []string) {
func SurfsharkHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func TorguardCountryChoices(servers []models.TorguardServer) (choices []string) {
func TorguardCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -12,7 +12,7 @@ func TorguardCountryChoices(servers []models.TorguardServer) (choices []string)
return makeUnique(choices)
}
func TorguardCityChoices(servers []models.TorguardServer) (choices []string) {
func TorguardCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -20,7 +20,7 @@ func TorguardCityChoices(servers []models.TorguardServer) (choices []string) {
return makeUnique(choices)
}
func TorguardHostnameChoices(servers []models.TorguardServer) (choices []string) {
func TorguardHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func VPNUnlimitedCountryChoices(servers []models.VPNUnlimitedServer) (choices []string) {
func VPNUnlimitedCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
@@ -12,7 +12,7 @@ func VPNUnlimitedCountryChoices(servers []models.VPNUnlimitedServer) (choices []
return makeUnique(choices)
}
func VPNUnlimitedCityChoices(servers []models.VPNUnlimitedServer) (choices []string) {
func VPNUnlimitedCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -20,7 +20,7 @@ func VPNUnlimitedCityChoices(servers []models.VPNUnlimitedServer) (choices []str
return makeUnique(choices)
}
func VPNUnlimitedHostnameChoices(servers []models.VPNUnlimitedServer) (choices []string) {
func VPNUnlimitedHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -4,7 +4,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func VyprvpnRegionChoices(servers []models.VyprvpnServer) (choices []string) {
func VyprvpnRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
@@ -2,7 +2,7 @@ package validation
import "github.com/qdm12/gluetun/internal/models"
func WevpnCityChoices(servers []models.WevpnServer) (choices []string) {
func WevpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -10,7 +10,7 @@ func WevpnCityChoices(servers []models.WevpnServer) (choices []string) {
return makeUnique(choices)
}
func WevpnHostnameChoices(servers []models.WevpnServer) (choices []string) {
func WevpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
@@ -2,7 +2,7 @@ package validation
import "github.com/qdm12/gluetun/internal/models"
func WindscribeRegionChoices(servers []models.WindscribeServer) (choices []string) {
func WindscribeRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
@@ -10,7 +10,7 @@ func WindscribeRegionChoices(servers []models.WindscribeServer) (choices []strin
return makeUnique(choices)
}
func WindscribeCityChoices(servers []models.WindscribeServer) (choices []string) {
func WindscribeCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
@@ -18,7 +18,7 @@ func WindscribeCityChoices(servers []models.WindscribeServer) (choices []string)
return makeUnique(choices)
}
func WindscribeHostnameChoices(servers []models.WindscribeServer) (choices []string) {
func WindscribeHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
+51 -197
View File
@@ -28,244 +28,98 @@ func (a AllServers) GetCopy() (servers AllServers) {
return servers
}
func (a *AllServers) GetCyberghost() (servers []CyberghostServer) {
if a.Cyberghost.Servers == nil {
return nil
}
servers = make([]CyberghostServer, len(a.Cyberghost.Servers))
for i, serverToCopy := range a.Cyberghost.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetCyberghost() (servers []Server) {
return copyServers(a.Cyberghost.Servers)
}
func (a *AllServers) GetExpressvpn() (servers []ExpressvpnServer) {
if a.Expressvpn.Servers == nil {
return nil
}
servers = make([]ExpressvpnServer, len(a.Expressvpn.Servers))
for i, serverToCopy := range a.Expressvpn.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetExpressvpn() (servers []Server) {
return copyServers(a.Expressvpn.Servers)
}
func (a *AllServers) GetFastestvpn() (servers []FastestvpnServer) {
if a.Fastestvpn.Servers == nil {
return nil
}
servers = make([]FastestvpnServer, len(a.Fastestvpn.Servers))
for i, serverToCopy := range a.Fastestvpn.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetFastestvpn() (servers []Server) {
return copyServers(a.Fastestvpn.Servers)
}
func (a *AllServers) GetHideMyAss() (servers []HideMyAssServer) {
if a.HideMyAss.Servers == nil {
return nil
}
servers = make([]HideMyAssServer, len(a.HideMyAss.Servers))
for i, serverToCopy := range a.HideMyAss.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetHideMyAss() (servers []Server) {
return copyServers(a.HideMyAss.Servers)
}
func (a *AllServers) GetIpvanish() (servers []IpvanishServer) {
if a.Ipvanish.Servers == nil {
return nil
}
servers = make([]IpvanishServer, len(a.Ipvanish.Servers))
for i, serverToCopy := range a.Ipvanish.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetIpvanish() (servers []Server) {
return copyServers(a.Ipvanish.Servers)
}
func (a *AllServers) GetIvpn() (servers []IvpnServer) {
if a.Ivpn.Servers == nil {
return nil
}
servers = make([]IvpnServer, len(a.Ivpn.Servers))
for i, serverToCopy := range a.Ivpn.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetIvpn() (servers []Server) {
return copyServers(a.Ivpn.Servers)
}
func (a *AllServers) GetMullvad() (servers []MullvadServer) {
if a.Mullvad.Servers == nil {
return nil
}
servers = make([]MullvadServer, len(a.Mullvad.Servers))
for i, serverToCopy := range a.Mullvad.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetMullvad() (servers []Server) {
return copyServers(a.Mullvad.Servers)
}
func (a *AllServers) GetNordvpn() (servers []NordvpnServer) {
if a.Nordvpn.Servers == nil {
return nil
}
servers = make([]NordvpnServer, len(a.Nordvpn.Servers))
for i, serverToCopy := range a.Nordvpn.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetNordvpn() (servers []Server) {
return copyServers(a.Nordvpn.Servers)
}
func (a *AllServers) GetPerfectprivacy() (servers []PerfectprivacyServer) {
if a.Perfectprivacy.Servers == nil {
return nil
}
servers = make([]PerfectprivacyServer, len(a.Perfectprivacy.Servers))
for i, serverToCopy := range a.Perfectprivacy.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetPerfectprivacy() (servers []Server) {
return copyServers(a.Perfectprivacy.Servers)
}
func (a *AllServers) GetPia() (servers []PIAServer) {
if a.Pia.Servers == nil {
return nil
}
servers = make([]PIAServer, len(a.Pia.Servers))
for i, serverToCopy := range a.Pia.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetPia() (servers []Server) {
return copyServers(a.Pia.Servers)
}
func (a *AllServers) GetPrivado() (servers []PrivadoServer) {
if a.Privado.Servers == nil {
return nil
}
servers = make([]PrivadoServer, len(a.Privado.Servers))
for i, serverToCopy := range a.Privado.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetPrivado() (servers []Server) {
return copyServers(a.Privado.Servers)
}
func (a *AllServers) GetPrivatevpn() (servers []PrivatevpnServer) {
if a.Privatevpn.Servers == nil {
return nil
}
servers = make([]PrivatevpnServer, len(a.Privatevpn.Servers))
for i, serverToCopy := range a.Privatevpn.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetPrivatevpn() (servers []Server) {
return copyServers(a.Privatevpn.Servers)
}
func (a *AllServers) GetProtonvpn() (servers []ProtonvpnServer) {
if a.Protonvpn.Servers == nil {
return nil
}
servers = make([]ProtonvpnServer, len(a.Protonvpn.Servers))
for i, serverToCopy := range a.Protonvpn.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetProtonvpn() (servers []Server) {
return copyServers(a.Protonvpn.Servers)
}
func (a *AllServers) GetPurevpn() (servers []PurevpnServer) {
if a.Purevpn.Servers == nil {
return nil
}
servers = make([]PurevpnServer, len(a.Purevpn.Servers))
for i, serverToCopy := range a.Purevpn.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetPurevpn() (servers []Server) {
return copyServers(a.Purevpn.Servers)
}
func (a *AllServers) GetSurfshark() (servers []SurfsharkServer) {
if a.Surfshark.Servers == nil {
return nil
}
servers = make([]SurfsharkServer, len(a.Surfshark.Servers))
for i, serverToCopy := range a.Surfshark.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetSurfshark() (servers []Server) {
return copyServers(a.Surfshark.Servers)
}
func (a *AllServers) GetTorguard() (servers []TorguardServer) {
if a.Torguard.Servers == nil {
return nil
}
servers = make([]TorguardServer, len(a.Torguard.Servers))
for i, serverToCopy := range a.Torguard.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetTorguard() (servers []Server) {
return copyServers(a.Torguard.Servers)
}
func (a *AllServers) GetVPNUnlimited() (servers []VPNUnlimitedServer) {
if a.VPNUnlimited.Servers == nil {
return nil
}
servers = make([]VPNUnlimitedServer, len(a.VPNUnlimited.Servers))
for i, serverToCopy := range a.VPNUnlimited.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetVPNUnlimited() (servers []Server) {
return copyServers(a.VPNUnlimited.Servers)
}
func (a *AllServers) GetVyprvpn() (servers []VyprvpnServer) {
if a.Vyprvpn.Servers == nil {
return nil
}
servers = make([]VyprvpnServer, len(a.Vyprvpn.Servers))
for i, serverToCopy := range a.Vyprvpn.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetVyprvpn() (servers []Server) {
return copyServers(a.Vyprvpn.Servers)
}
func (a *AllServers) GetWevpn() (servers []WevpnServer) {
if a.Windscribe.Servers == nil {
return nil
}
servers = make([]WevpnServer, len(a.Wevpn.Servers))
for i, serverToCopy := range a.Wevpn.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
}
return servers
func (a *AllServers) GetWevpn() (servers []Server) {
return copyServers(a.Wevpn.Servers)
}
func (a *AllServers) GetWindscribe() (servers []WindscribeServer) {
if a.Windscribe.Servers == nil {
func (a *AllServers) GetWindscribe() (servers []Server) {
return copyServers(a.Windscribe.Servers)
}
func copyServers(servers []Server) (serversCopy []Server) {
if servers == nil {
return nil
}
servers = make([]WindscribeServer, len(a.Windscribe.Servers))
for i, serverToCopy := range a.Windscribe.Servers {
servers[i] = serverToCopy
servers[i].IPs = copyIPs(serverToCopy.IPs)
serversCopy = make([]Server, len(servers))
for i, server := range servers {
serversCopy[i] = server
serversCopy[i].IPs = copyIPs(server.IPs)
}
return servers
return serversCopy
}
func copyIPs(toCopy []net.IP) (copied []net.IP) {
+41 -41
View File
@@ -10,100 +10,100 @@ import (
func Test_AllServers_GetCopy(t *testing.T) {
allServers := AllServers{
Cyberghost: CyberghostServers{
Cyberghost: Servers{
Version: 2,
Servers: []CyberghostServer{{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Expressvpn: ExpressvpnServers{
Servers: []ExpressvpnServer{{
Expressvpn: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Fastestvpn: FastestvpnServers{
Servers: []FastestvpnServer{{
Fastestvpn: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
HideMyAss: HideMyAssServers{
Servers: []HideMyAssServer{{
HideMyAss: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Ipvanish: IpvanishServers{
Servers: []IpvanishServer{{
Ipvanish: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Ivpn: IvpnServers{
Servers: []IvpnServer{{
Ivpn: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Mullvad: MullvadServers{
Servers: []MullvadServer{{
Mullvad: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Nordvpn: NordvpnServers{
Servers: []NordvpnServer{{
Nordvpn: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Perfectprivacy: PerfectprivacyServers{
Servers: []PerfectprivacyServer{{
Perfectprivacy: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Privado: PrivadoServers{
Servers: []PrivadoServer{{
Privado: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Pia: PiaServers{
Servers: []PIAServer{{
Pia: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Privatevpn: PrivatevpnServers{
Servers: []PrivatevpnServer{{
Privatevpn: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Protonvpn: ProtonvpnServers{
Servers: []ProtonvpnServer{{
Protonvpn: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Purevpn: PurevpnServers{
Purevpn: Servers{
Version: 1,
Servers: []PurevpnServer{{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Surfshark: SurfsharkServers{
Servers: []SurfsharkServer{{
Surfshark: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Torguard: TorguardServers{
Servers: []TorguardServer{{
Torguard: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
VPNUnlimited: VPNUnlimitedServers{
Servers: []VPNUnlimitedServer{{
VPNUnlimited: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Vyprvpn: VyprvpnServers{
Servers: []VyprvpnServer{{
Vyprvpn: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
Windscribe: WindscribeServers{
Servers: []WindscribeServer{{
Windscribe: Servers{
Servers: []Server{{
IPs: []net.IP{{1, 2, 3, 4}},
}},
},
@@ -116,8 +116,8 @@ func Test_AllServers_GetCopy(t *testing.T) {
func Test_AllServers_GetVyprvpn(t *testing.T) {
allServers := AllServers{
Vyprvpn: VyprvpnServers{
Servers: []VyprvpnServer{
Vyprvpn: Servers{
Servers: []Server{
{Hostname: "a", IPs: []net.IP{{1, 1, 1, 1}}},
{Hostname: "b", IPs: []net.IP{{2, 2, 2, 2}}},
},
@@ -126,7 +126,7 @@ func Test_AllServers_GetVyprvpn(t *testing.T) {
servers := allServers.GetVyprvpn()
expectedServers := []VyprvpnServer{
expectedServers := []Server{
{Hostname: "a", IPs: []net.IP{{1, 1, 1, 1}}},
{Hostname: "b", IPs: []net.IP{{2, 2, 2, 2}}},
}
+117 -269
View File
@@ -3,6 +3,8 @@ package models
import (
"fmt"
"strings"
"github.com/qdm12/gluetun/internal/constants/providers"
)
func boolToMarkdown(b bool) string {
@@ -14,280 +16,126 @@ func boolToMarkdown(b bool) string {
func markdownTableHeading(legendFields ...string) (markdown string) {
return "| " + strings.Join(legendFields, " | ") + " |\n" +
"|" + strings.Repeat(" --- |", len(legendFields)) + "\n"
"|" + strings.Repeat(" --- |", len(legendFields))
}
func (s *CyberghostServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
const (
vpnHeader = "VPN"
countryHeader = "Country"
regionHeader = "Region"
cityHeader = "City"
ispHeader = "ISP"
ownedHeader = "Owned"
numberHeader = "Number"
hostnameHeader = "Hostname"
tcpHeader = "TCP"
udpHeader = "UDP"
multiHopHeader = "MultiHop"
freeHeader = "Free"
streamHeader = "Stream"
portForwardHeader = "Port forwarding"
)
func (s *Server) ToMarkdown(headers ...string) (markdown string) {
if len(headers) == 0 {
return ""
}
fields := make([]string, len(headers))
for i, header := range headers {
switch header {
case vpnHeader:
fields[i] = s.VPN
case countryHeader:
fields[i] = s.Country
case regionHeader:
fields[i] = s.Region
case cityHeader:
fields[i] = s.City
case ispHeader:
fields[i] = s.ISP
case ownedHeader:
fields[i] = boolToMarkdown(s.Owned)
case numberHeader:
fields[i] = fmt.Sprint(s.Number)
case hostnameHeader:
fields[i] = fmt.Sprintf("`%s`", s.Hostname)
case tcpHeader:
fields[i] = boolToMarkdown(s.TCP)
case udpHeader:
fields[i] = boolToMarkdown(s.UDP)
case multiHopHeader:
fields[i] = boolToMarkdown(s.MultiHop)
case freeHeader:
fields[i] = boolToMarkdown(s.Free)
case streamHeader:
fields[i] = boolToMarkdown(s.Stream)
case portForwardHeader:
fields[i] = boolToMarkdown(s.PortForward)
}
}
return "| " + strings.Join(fields, " | ") + " |"
}
func (s *Servers) ToMarkdown(vpnProvider string) (markdown string) {
headers := getMarkdownHeaders(vpnProvider)
legend := markdownTableHeading(headers...)
entries := make([]string, len(s.Servers))
for i, server := range s.Servers {
entries[i] = server.ToMarkdown(headers...)
}
markdown = legend + "\n" +
strings.Join(entries, "\n") + "\n"
return markdown
}
func (s CyberghostServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | `%s` | %s | %s |", s.Country, s.Hostname,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *ExpressvpnServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "City", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
func getMarkdownHeaders(vpnProvider string) (headers []string) {
switch vpnProvider {
case providers.Cyberghost:
return []string{countryHeader, hostnameHeader, tcpHeader, udpHeader}
case providers.Expressvpn:
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
case providers.Fastestvpn:
return []string{countryHeader, hostnameHeader, tcpHeader, udpHeader}
case providers.HideMyAss:
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
case providers.Ipvanish:
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
case providers.Ivpn:
return []string{countryHeader, cityHeader, ispHeader, hostnameHeader, vpnHeader, tcpHeader, udpHeader}
case providers.Mullvad:
return []string{countryHeader, cityHeader, ispHeader, ownedHeader, hostnameHeader, vpnHeader}
case providers.Nordvpn:
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader}
case providers.Perfectprivacy:
return []string{cityHeader, tcpHeader, udpHeader}
case providers.Privado:
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader}
case providers.PrivateInternetAccess:
return []string{regionHeader, hostnameHeader, tcpHeader, udpHeader, portForwardHeader}
case providers.Privatevpn:
return []string{countryHeader, cityHeader, hostnameHeader}
case providers.Protonvpn:
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, freeHeader}
case providers.Purevpn:
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
case providers.Surfshark:
return []string{regionHeader, countryHeader, cityHeader, hostnameHeader, multiHopHeader, tcpHeader, udpHeader}
case providers.Torguard:
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
case providers.VPNUnlimited:
return []string{countryHeader, cityHeader, hostnameHeader, freeHeader, streamHeader, tcpHeader, udpHeader}
case providers.Vyprvpn:
return []string{regionHeader, hostnameHeader, tcpHeader, udpHeader}
case providers.Wevpn:
return []string{cityHeader, hostnameHeader, tcpHeader, udpHeader}
case providers.Windscribe:
return []string{regionHeader, cityHeader, hostnameHeader, vpnHeader}
default:
return nil
}
return markdown
}
func (s *ExpressvpnServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | `%s` | %s | %s |",
s.Country, s.City, s.Hostname,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *FastestvpnServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *FastestvpnServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | `%s` | %s | %s |",
s.Country, s.Hostname, boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *HideMyAssServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "Region", "City", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *HideMyAssServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | %s | `%s` | %s | %s |",
s.Country, s.Region, s.City, s.Hostname,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *IpvanishServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "City", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *IpvanishServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | `%s` | %s | %s |",
s.Country, s.City, s.Hostname,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *IvpnServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "City", "ISP", "Hostname", "VPN", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *IvpnServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | %s | `%s` | %s | %s | %s |",
s.Country, s.City, s.ISP, s.Hostname, s.VPN,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *MullvadServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "City", "ISP", "Owned",
"Hostname", "VPN")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *MullvadServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | %s | %s | `%s` | %s |",
s.Country, s.City, s.ISP, boolToMarkdown(s.Owned),
s.Hostname, s.VPN)
}
func (s *NordvpnServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Region", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *NordvpnServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | `%s` | %s | %s |",
s.Region, s.Hostname,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *PrivadoServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "Region", "City", "Hostname")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *PrivadoServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | %s | `%s` |",
s.Country, s.Region, s.City, s.Hostname)
}
func (s *PerfectprivacyServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("City", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *PerfectprivacyServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | %s |",
s.City, boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *PiaServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Region", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *PIAServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | `%s` | %s | %s |",
s.Region, s.Hostname,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *PrivatevpnServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "City", "Hostname")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *PrivatevpnServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | `%s` |",
s.Country, s.City, s.Hostname)
}
func (s *ProtonvpnServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "Region", "City", "Hostname", "Free tier")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *ProtonvpnServer) ToMarkdown() (markdown string) {
isFree := strings.Contains(strings.ToLower(s.Name), "free")
return fmt.Sprintf("| %s | %s | %s | `%s` | %s |",
s.Country, s.Region, s.City, s.Hostname, boolToMarkdown(isFree))
}
func (s *PurevpnServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "Region", "City", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *PurevpnServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | %s | `%s` | %s | %s |",
s.Country, s.Region, s.City, s.Hostname,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *SurfsharkServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Region", "Country", "City", "Hostname", "Multi-hop", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *SurfsharkServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | %s | `%s` | %s | %s | %s |",
s.Region, s.Country, s.City, s.Hostname, boolToMarkdown(s.MultiHop),
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *TorguardServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "City", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *TorguardServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | `%s` | %s | %s |",
s.Country, s.City, s.Hostname,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *VPNUnlimitedServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Country", "City", "Hostname", "Free tier", "Streaming", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *VPNUnlimitedServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | `%s` | %s | %s | %s | %s |",
s.Country, s.City, s.Hostname,
boolToMarkdown(s.Free), boolToMarkdown(s.Stream),
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *VyprvpnServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Region", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *VyprvpnServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | `%s` | %s | %s |",
s.Region, s.Hostname,
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *WevpnServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("City", "Hostname", "TCP", "UDP")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *WevpnServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | `%s` | %s | %s |",
s.City, s.Hostname, boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
}
func (s *WindscribeServers) ToMarkdown() (markdown string) {
markdown = markdownTableHeading("Region", "City", "Hostname", "VPN")
for _, server := range s.Servers {
markdown += server.ToMarkdown() + "\n"
}
return markdown
}
func (s *WindscribeServer) ToMarkdown() (markdown string) {
return fmt.Sprintf("| %s | %s | `%s` | %s |",
s.Region, s.City, s.Hostname, s.VPN)
}
+39 -28
View File
@@ -3,43 +3,54 @@ package models
import (
"testing"
"github.com/qdm12/gluetun/internal/constants/providers"
"github.com/stretchr/testify/assert"
)
func Test_CyberghostServers_ToMarkdown(t *testing.T) {
func Test_Servers_ToMarkdown(t *testing.T) {
t.Parallel()
servers := CyberghostServers{
Servers: []CyberghostServer{
{Country: "a", UDP: true, Hostname: "xa"},
{Country: "b", TCP: true, Hostname: "xb"},
testCases := map[string]struct {
provider string
servers Servers
expectedMarkdown string
}{
providers.Cyberghost: {
provider: providers.Cyberghost,
servers: Servers{
Servers: []Server{
{Country: "a", UDP: true, Hostname: "xa"},
{Country: "b", TCP: true, Hostname: "xb"},
},
},
expectedMarkdown: "| Country | Hostname | TCP | UDP |\n" +
"| --- | --- | --- | --- |\n" +
"| a | `xa` | ❌ | ✅ |\n" +
"| b | `xb` | ✅ | ❌ |\n",
},
providers.Fastestvpn: {
provider: providers.Fastestvpn,
servers: Servers{
Servers: []Server{
{Country: "a", Hostname: "xa", TCP: true},
{Country: "b", Hostname: "xb", UDP: true},
},
},
expectedMarkdown: "| Country | Hostname | TCP | UDP |\n" +
"| --- | --- | --- | --- |\n" +
"| a | `xa` | ✅ | ❌ |\n" +
"| b | `xb` | ❌ | ✅ |\n",
},
}
markdown := servers.ToMarkdown()
const expected = "| Country | Hostname | TCP | UDP |\n" +
"| --- | --- | --- | --- |\n" +
"| a | `xa` | ❌ | ✅ |\n" +
"| b | `xb` | ✅ | ❌ |\n"
for name, testCase := range testCases {
testCase := testCase
t.Run(name, func(t *testing.T) {
t.Parallel()
assert.Equal(t, expected, markdown)
}
markdown := testCase.servers.ToMarkdown(testCase.provider)
func Test_FastestvpnServers_ToMarkdown(t *testing.T) {
t.Parallel()
servers := FastestvpnServers{
Servers: []FastestvpnServer{
{Country: "a", Hostname: "xa", TCP: true},
{Country: "b", Hostname: "xb", UDP: true},
},
assert.Equal(t, testCase.expectedMarkdown, markdown)
})
}
markdown := servers.ToMarkdown()
const expected = "| Country | Hostname | TCP | UDP |\n" +
"| --- | --- | --- | --- |\n" +
"| a | `xa` | ✅ | ❌ |\n" +
"| b | `xb` | ❌ | ✅ |\n"
assert.Equal(t, expected, markdown)
}
+15 -177
View File
@@ -4,187 +4,25 @@ import (
"net"
)
type CyberghostServer struct {
Country string `json:"country,omitempty"`
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type ExpressvpnServer struct {
Country string `json:"country,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type FastestvpnServer struct {
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
Country string `json:"country,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type HideMyAssServer struct {
Country string `json:"country,omitempty"`
Region string `json:"region,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type IpvanishServer struct {
Country string `json:"country,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type IvpnServer struct {
VPN string `json:"vpn,omitempty"`
Country string `json:"country,omitempty"`
City string `json:"city,omitempty"`
ISP string `json:"isp,omitempty"`
Hostname string `json:"hostname,omitempty"`
WgPubKey string `json:"wgpubkey,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type MullvadServer struct {
VPN string `json:"vpn,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
Country string `json:"country,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
ISP string `json:"isp,omitempty"`
Owned bool `json:"owned,omitempty"`
WgPubKey string `json:"wgpubkey,omitempty"`
}
type NordvpnServer struct { //nolint:maligned
Region string `json:"region,omitempty"`
Hostname string `json:"hostname,omitempty"`
Number uint16 `json:"number,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
}
type PerfectprivacyServer struct {
City string `json:"city,omitempty"` // primary key
IPs []net.IP `json:"ips,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
}
type PrivadoServer struct {
Country string `json:"country,omitempty"`
Region string `json:"region,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type PIAServer struct {
type Server struct {
VPN string `json:"vpn,omitempty"`
// Surfshark: country is also used for multi-hop
Country string `json:"country,omitempty"`
Region string `json:"region,omitempty"`
Hostname string `json:"hostname,omitempty"`
City string `json:"city,omitempty"`
ISP string `json:"isp,omitempty"`
Owned bool `json:"owned,omitempty"`
Number uint16 `json:"number,omitempty"`
ServerName string `json:"server_name,omitempty"`
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
OvpnX509 string `json:"x509,omitempty"`
RetroLoc string `json:"retroloc,omitempty"` // TODO remove in v4
MultiHop bool `json:"multihop,omitempty"`
WgPubKey string `json:"wgpubkey,omitempty"`
Free bool `json:"free,omitempty"`
Stream bool `json:"stream,omitempty"`
PortForward bool `json:"port_forward,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type PrivatevpnServer struct {
Country string `json:"country,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type ProtonvpnServer struct {
Country string `json:"country,omitempty"`
Region string `json:"region,omitempty"`
City string `json:"city,omitempty"`
Name string `json:"server_name,omitempty"`
Hostname string `json:"hostname,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type PurevpnServer struct {
Country string `json:"country,omitempty"`
Region string `json:"region,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type SurfsharkServer struct {
Region string `json:"region,omitempty"`
Country string `json:"country,omitempty"` // Country is also used for multi-hop
City string `json:"city,omitempty"`
RetroLoc string `json:"retroloc,omitempty"` // TODO remove in v4
Hostname string `json:"hostname,omitempty"`
MultiHop bool `json:"multihop,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type TorguardServer struct {
Country string `json:"country,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type VPNUnlimitedServer struct {
Country string `json:"country,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
Free bool `json:"free,omitempty"`
Stream bool `json:"stream,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type VyprvpnServer struct {
Region string `json:"region,omitempty"`
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"` // only support for UDP
IPs []net.IP `json:"ips,omitempty"`
}
type WevpnServer struct {
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
TCP bool `json:"tcp,omitempty"`
UDP bool `json:"udp,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
type WindscribeServer struct {
VPN string `json:"vpn,omitempty"`
Region string `json:"region,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
OvpnX509 string `json:"x509,omitempty"`
WgPubKey string `json:"wgpubkey,omitempty"`
IPs []net.IP `json:"ips,omitempty"`
}
+25 -120
View File
@@ -1,27 +1,27 @@
package models
type AllServers struct {
Version uint16 `json:"version"` // used for migration of the top level scheme
Cyberghost CyberghostServers `json:"cyberghost"`
Expressvpn ExpressvpnServers `json:"expressvpn"`
Fastestvpn FastestvpnServers `json:"fastestvpn"`
HideMyAss HideMyAssServers `json:"hidemyass"`
Ipvanish IpvanishServers `json:"ipvanish"`
Ivpn IvpnServers `json:"ivpn"`
Mullvad MullvadServers `json:"mullvad"`
Perfectprivacy PerfectprivacyServers `json:"perfectprivacy"`
Nordvpn NordvpnServers `json:"nordvpn"`
Privado PrivadoServers `json:"privado"`
Pia PiaServers `json:"pia"`
Privatevpn PrivatevpnServers `json:"privatevpn"`
Protonvpn ProtonvpnServers `json:"protonvpn"`
Purevpn PurevpnServers `json:"purevpn"`
Surfshark SurfsharkServers `json:"surfshark"`
Torguard TorguardServers `json:"torguard"`
VPNUnlimited VPNUnlimitedServers `json:"vpnunlimited"`
Vyprvpn VyprvpnServers `json:"vyprvpn"`
Wevpn WevpnServers `json:"wevpn"`
Windscribe WindscribeServers `json:"windscribe"`
Version uint16 `json:"version"` // used for migration of the top level scheme
Cyberghost Servers `json:"cyberghost"`
Expressvpn Servers `json:"expressvpn"`
Fastestvpn Servers `json:"fastestvpn"`
HideMyAss Servers `json:"hidemyass"`
Ipvanish Servers `json:"ipvanish"`
Ivpn Servers `json:"ivpn"`
Mullvad Servers `json:"mullvad"`
Perfectprivacy Servers `json:"perfectprivacy"`
Nordvpn Servers `json:"nordvpn"`
Privado Servers `json:"privado"`
Pia Servers `json:"pia"`
Privatevpn Servers `json:"privatevpn"`
Protonvpn Servers `json:"protonvpn"`
Purevpn Servers `json:"purevpn"`
Surfshark Servers `json:"surfshark"`
Torguard Servers `json:"torguard"`
VPNUnlimited Servers `json:"vpnunlimited"`
Vyprvpn Servers `json:"vyprvpn"`
Wevpn Servers `json:"wevpn"`
Windscribe Servers `json:"windscribe"`
}
func (a *AllServers) Count() int {
@@ -47,103 +47,8 @@ func (a *AllServers) Count() int {
len(a.Windscribe.Servers)
}
type CyberghostServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []CyberghostServer `json:"servers"`
}
type ExpressvpnServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []ExpressvpnServer `json:"servers"`
}
type FastestvpnServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []FastestvpnServer `json:"servers"`
}
type HideMyAssServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []HideMyAssServer `json:"servers"`
}
type IpvanishServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []IpvanishServer `json:"servers"`
}
type IvpnServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []IvpnServer `json:"servers"`
}
type MullvadServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []MullvadServer `json:"servers"`
}
type NordvpnServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []NordvpnServer `json:"servers"`
}
type PerfectprivacyServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []PerfectprivacyServer `json:"servers"`
}
type PrivadoServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []PrivadoServer `json:"servers"`
}
type PiaServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []PIAServer `json:"servers"`
}
type PrivatevpnServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []PrivatevpnServer `json:"servers"`
}
type ProtonvpnServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []ProtonvpnServer `json:"servers"`
}
type PurevpnServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []PurevpnServer `json:"servers"`
}
type SurfsharkServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []SurfsharkServer `json:"servers"`
}
type TorguardServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []TorguardServer `json:"servers"`
}
type VPNUnlimitedServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []VPNUnlimitedServer `json:"servers"`
}
type VyprvpnServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []VyprvpnServer `json:"servers"`
}
type WevpnServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []WevpnServer `json:"servers"`
}
type WindscribeServers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []WindscribeServer `json:"servers"`
type Servers struct {
Version uint16 `json:"version"`
Timestamp int64 `json:"timestamp"`
Servers []Server `json:"servers"`
}
+1 -1
View File
@@ -11,7 +11,7 @@ import (
var ErrGroupMismatchesProtocol = errors.New("server group does not match protocol")
func (c *Cyberghost) filterServers(selection settings.ServerSelection) (
servers []models.CyberghostServer, err error) {
servers []models.Server, err error) {
for _, server := range c.servers {
switch {
case
+10 -10
View File
@@ -16,9 +16,9 @@ func boolPtr(b bool) *bool { return &b }
func Test_Cyberghost_filterServers(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.CyberghostServer
servers []models.Server
selection settings.ServerSelection
filteredServers []models.CyberghostServer
filteredServers []models.Server
err error
}{
"no server": {
@@ -26,20 +26,20 @@ func Test_Cyberghost_filterServers(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"servers without filter defaults to UDP": {
servers: []models.CyberghostServer{
servers: []models.Server{
{Country: "a", TCP: true},
{Country: "b", TCP: true},
{Country: "c", UDP: true},
{Country: "d", UDP: true},
},
selection: settings.ServerSelection{}.WithDefaults(providers.Cyberghost),
filteredServers: []models.CyberghostServer{
filteredServers: []models.Server{
{Country: "c", UDP: true},
{Country: "d", UDP: true},
},
},
"servers with TCP selection": {
servers: []models.CyberghostServer{
servers: []models.Server{
{Country: "a", TCP: true},
{Country: "b", TCP: true},
{Country: "c", UDP: true},
@@ -50,13 +50,13 @@ func Test_Cyberghost_filterServers(t *testing.T) {
TCP: boolPtr(true),
},
}.WithDefaults(providers.Cyberghost),
filteredServers: []models.CyberghostServer{
filteredServers: []models.Server{
{Country: "a", TCP: true},
{Country: "b", TCP: true},
},
},
"servers with regions filter": {
servers: []models.CyberghostServer{
servers: []models.Server{
{Country: "a", UDP: true},
{Country: "b", UDP: true},
{Country: "c", UDP: true},
@@ -65,13 +65,13 @@ func Test_Cyberghost_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Countries: []string{"a", "c"},
}.WithDefaults(providers.Cyberghost),
filteredServers: []models.CyberghostServer{
filteredServers: []models.Server{
{Country: "a", UDP: true},
{Country: "c", UDP: true},
},
},
"servers with hostnames filter": {
servers: []models.CyberghostServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
@@ -79,7 +79,7 @@ func Test_Cyberghost_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"a", "c"},
}.WithDefaults(providers.Cyberghost),
filteredServers: []models.CyberghostServer{
filteredServers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "c", UDP: true},
},
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Cyberghost struct {
servers []models.CyberghostServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.CyberghostServer, randSource rand.Source) *Cyberghost {
func New(servers []models.Server, randSource rand.Source) *Cyberghost {
return &Cyberghost{
servers: servers,
randSource: randSource,
@@ -18,7 +18,7 @@ func Test_Provider_GetConnection(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.ExpressvpnServer
servers []models.Server
selection settings.ServerSelection
connection models.Connection
err error
@@ -28,7 +28,7 @@ func Test_Provider_GetConnection(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.ExpressvpnServer{
servers: []models.Server{
{IPs: []net.IP{net.IPv4(1, 1, 1, 1)}, UDP: true},
{IPs: []net.IP{net.IPv4(2, 2, 2, 2)}, UDP: true},
{IPs: []net.IP{net.IPv4(3, 3, 3, 3)}, UDP: true},
@@ -45,7 +45,7 @@ func Test_Provider_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
TargetIP: net.IPv4(2, 2, 2, 2),
}.WithDefaults(providers.Expressvpn),
servers: []models.ExpressvpnServer{
servers: []models.Server{
{IPs: []net.IP{net.IPv4(1, 1, 1, 1)}, UDP: true},
{IPs: []net.IP{net.IPv4(2, 2, 2, 2)}, UDP: true},
{IPs: []net.IP{net.IPv4(3, 3, 3, 3)}, UDP: true},
@@ -61,7 +61,7 @@ func Test_Provider_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Expressvpn),
servers: []models.ExpressvpnServer{
servers: []models.Server{
{Hostname: "a", IPs: []net.IP{net.IPv4(1, 1, 1, 1)}, UDP: true},
{Hostname: "b", IPs: []net.IP{net.IPv4(2, 2, 2, 2)}, UDP: true},
{Hostname: "a", IPs: []net.IP{net.IPv4(3, 3, 3, 3)}, UDP: true},
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (p *Provider) filterServers(selection settings.ServerSelection) (
servers []models.ExpressvpnServer, err error) {
servers []models.Server, err error) {
for _, server := range p.servers {
switch {
case
+12 -12
View File
@@ -18,9 +18,9 @@ func Test_Expressvpn_filterServers(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.ExpressvpnServer
servers []models.Server
selection settings.ServerSelection
filtered []models.ExpressvpnServer
filtered []models.Server
err error
}{
"no server available": {
@@ -28,13 +28,13 @@ func Test_Expressvpn_filterServers(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.ExpressvpnServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
},
selection: settings.ServerSelection{}.WithDefaults(providers.Expressvpn),
filtered: []models.ExpressvpnServer{
filtered: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
@@ -44,12 +44,12 @@ func Test_Expressvpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Countries: []string{"b"},
}.WithDefaults(providers.Expressvpn),
servers: []models.ExpressvpnServer{
servers: []models.Server{
{Country: "a", UDP: true},
{Country: "b", UDP: true},
{Country: "c", UDP: true},
},
filtered: []models.ExpressvpnServer{
filtered: []models.Server{
{Country: "b", UDP: true},
},
},
@@ -57,12 +57,12 @@ func Test_Expressvpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Cities: []string{"b"},
}.WithDefaults(providers.Expressvpn),
servers: []models.ExpressvpnServer{
servers: []models.Server{
{City: "a", UDP: true},
{City: "b", UDP: true},
{City: "c", UDP: true},
},
filtered: []models.ExpressvpnServer{
filtered: []models.Server{
{City: "b", UDP: true},
},
},
@@ -70,12 +70,12 @@ func Test_Expressvpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Expressvpn),
servers: []models.ExpressvpnServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
},
filtered: []models.ExpressvpnServer{
filtered: []models.Server{
{Hostname: "b", UDP: true},
},
},
@@ -85,12 +85,12 @@ func Test_Expressvpn_filterServers(t *testing.T) {
TCP: boolPtr(true),
},
}.WithDefaults(providers.Expressvpn),
servers: []models.ExpressvpnServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true, TCP: true},
{Hostname: "c", UDP: true},
},
filtered: []models.ExpressvpnServer{
filtered: []models.Server{
{Hostname: "b", UDP: true, TCP: true},
},
},
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Provider struct {
servers []models.ExpressvpnServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.ExpressvpnServer, randSource rand.Source) *Provider {
func New(servers []models.Server, randSource rand.Source) *Provider {
return &Provider{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (f *Fastestvpn) filterServers(selection settings.ServerSelection) (
servers []models.FastestvpnServer, err error) {
servers []models.Server, err error) {
for _, server := range f.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Fastestvpn struct {
servers []models.FastestvpnServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.FastestvpnServer, randSource rand.Source) *Fastestvpn {
func New(servers []models.Server, randSource rand.Source) *Fastestvpn {
return &Fastestvpn{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (h *HideMyAss) filterServers(selection settings.ServerSelection) (
servers []models.HideMyAssServer, err error) {
servers []models.Server, err error) {
for _, server := range h.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type HideMyAss struct {
servers []models.HideMyAssServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.HideMyAssServer, randSource rand.Source) *HideMyAss {
func New(servers []models.Server, randSource rand.Source) *HideMyAss {
return &HideMyAss{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (i *Ipvanish) filterServers(selection settings.ServerSelection) (
servers []models.IpvanishServer, err error) {
servers []models.Server, err error) {
for _, server := range i.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Ipvanish struct {
servers []models.IpvanishServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.IpvanishServer, randSource rand.Source) *Ipvanish {
func New(servers []models.Server, randSource rand.Source) *Ipvanish {
return &Ipvanish{
servers: servers,
randSource: randSource,
+4 -4
View File
@@ -18,7 +18,7 @@ func Test_Ivpn_GetConnection(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.IvpnServer
servers []models.Server
selection settings.ServerSelection
connection models.Connection
err error
@@ -28,7 +28,7 @@ func Test_Ivpn_GetConnection(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.IvpnServer{
servers: []models.Server{
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(1, 1, 1, 1)}, UDP: true},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(2, 2, 2, 2)}, UDP: true},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(3, 3, 3, 3)}, UDP: true},
@@ -45,7 +45,7 @@ func Test_Ivpn_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
TargetIP: net.IPv4(2, 2, 2, 2),
}.WithDefaults(providers.Ivpn),
servers: []models.IvpnServer{
servers: []models.Server{
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(1, 1, 1, 1)}, UDP: true},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(2, 2, 2, 2)}, UDP: true},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(3, 3, 3, 3)}, UDP: true},
@@ -61,7 +61,7 @@ func Test_Ivpn_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Ivpn),
servers: []models.IvpnServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a", IPs: []net.IP{net.IPv4(1, 1, 1, 1)}, UDP: true},
{VPN: constants.OpenVPN, Hostname: "b", IPs: []net.IP{net.IPv4(2, 2, 2, 2)}, UDP: true},
{VPN: constants.OpenVPN, Hostname: "a", IPs: []net.IP{net.IPv4(3, 3, 3, 3)}, UDP: true},
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (i *Ivpn) filterServers(selection settings.ServerSelection) (
servers []models.IvpnServer, err error) {
servers []models.Server, err error) {
for _, server := range i.servers {
switch {
case
+14 -14
View File
@@ -19,9 +19,9 @@ func Test_Ivpn_filterServers(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.IvpnServer
servers []models.Server
selection settings.ServerSelection
filtered []models.IvpnServer
filtered []models.Server
err error
}{
"no server available": {
@@ -29,13 +29,13 @@ func Test_Ivpn_filterServers(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.IvpnServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a", UDP: true},
{VPN: constants.OpenVPN, Hostname: "b", UDP: true},
{VPN: constants.OpenVPN, Hostname: "c", UDP: true},
},
selection: settings.ServerSelection{}.WithDefaults(providers.Ivpn),
filtered: []models.IvpnServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a", UDP: true},
{VPN: constants.OpenVPN, Hostname: "b", UDP: true},
{VPN: constants.OpenVPN, Hostname: "c", UDP: true},
@@ -45,12 +45,12 @@ func Test_Ivpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Countries: []string{"b"},
}.WithDefaults(providers.Ivpn),
servers: []models.IvpnServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Country: "a", UDP: true},
{VPN: constants.OpenVPN, Country: "b", UDP: true},
{VPN: constants.OpenVPN, Country: "c", UDP: true},
},
filtered: []models.IvpnServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Country: "b", UDP: true},
},
},
@@ -58,12 +58,12 @@ func Test_Ivpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Cities: []string{"b"},
}.WithDefaults(providers.Ivpn),
servers: []models.IvpnServer{
servers: []models.Server{
{VPN: constants.OpenVPN, City: "a", UDP: true},
{VPN: constants.OpenVPN, City: "b", UDP: true},
{VPN: constants.OpenVPN, City: "c", UDP: true},
},
filtered: []models.IvpnServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, City: "b", UDP: true},
},
},
@@ -71,12 +71,12 @@ func Test_Ivpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
ISPs: []string{"b"},
}.WithDefaults(providers.Ivpn),
servers: []models.IvpnServer{
servers: []models.Server{
{VPN: constants.OpenVPN, ISP: "a", UDP: true},
{VPN: constants.OpenVPN, ISP: "b", UDP: true},
{VPN: constants.OpenVPN, ISP: "c", UDP: true},
},
filtered: []models.IvpnServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, ISP: "b", UDP: true},
},
},
@@ -84,12 +84,12 @@ func Test_Ivpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Ivpn),
servers: []models.IvpnServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a", UDP: true},
{VPN: constants.OpenVPN, Hostname: "b", UDP: true},
{VPN: constants.OpenVPN, Hostname: "c", UDP: true},
},
filtered: []models.IvpnServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Hostname: "b", UDP: true},
},
},
@@ -99,12 +99,12 @@ func Test_Ivpn_filterServers(t *testing.T) {
TCP: boolPtr(true),
},
}.WithDefaults(providers.Ivpn),
servers: []models.IvpnServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a", UDP: true},
{VPN: constants.OpenVPN, Hostname: "b", UDP: true, TCP: true},
{VPN: constants.OpenVPN, Hostname: "c", UDP: true},
},
filtered: []models.IvpnServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Hostname: "b", UDP: true, TCP: true},
},
},
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Ivpn struct {
servers []models.IvpnServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.IvpnServer, randSource rand.Source) *Ivpn {
func New(servers []models.Server, randSource rand.Source) *Ivpn {
return &Ivpn{
servers: servers,
randSource: randSource,
+4 -4
View File
@@ -18,7 +18,7 @@ func Test_Mullvad_GetConnection(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.MullvadServer
servers []models.Server
selection settings.ServerSelection
connection models.Connection
err error
@@ -28,7 +28,7 @@ func Test_Mullvad_GetConnection(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(1, 1, 1, 1)}},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(2, 2, 2, 2)}},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(3, 3, 3, 3)}},
@@ -45,7 +45,7 @@ func Test_Mullvad_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
TargetIP: net.IPv4(2, 2, 2, 2),
}.WithDefaults(providers.Mullvad),
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(1, 1, 1, 1)}},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(2, 2, 2, 2)}},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(3, 3, 3, 3)}},
@@ -61,7 +61,7 @@ func Test_Mullvad_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Mullvad),
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a", IPs: []net.IP{net.IPv4(1, 1, 1, 1)}},
{VPN: constants.OpenVPN, Hostname: "b", IPs: []net.IP{net.IPv4(2, 2, 2, 2)}},
{VPN: constants.OpenVPN, Hostname: "a", IPs: []net.IP{net.IPv4(3, 3, 3, 3)}},
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (m *Mullvad) filterServers(selection settings.ServerSelection) (
servers []models.MullvadServer, err error) {
servers []models.Server, err error) {
for _, server := range m.servers {
switch {
case
+16 -16
View File
@@ -19,9 +19,9 @@ func Test_Mullvad_filterServers(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.MullvadServer
servers []models.Server
selection settings.ServerSelection
filtered []models.MullvadServer
filtered []models.Server
err error
}{
"no server available": {
@@ -29,13 +29,13 @@ func Test_Mullvad_filterServers(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a"},
{VPN: constants.OpenVPN, Hostname: "b"},
{VPN: constants.OpenVPN, Hostname: "c"},
},
selection: settings.ServerSelection{}.WithDefaults(providers.Mullvad),
filtered: []models.MullvadServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a"},
{VPN: constants.OpenVPN, Hostname: "b"},
{VPN: constants.OpenVPN, Hostname: "c"},
@@ -45,12 +45,12 @@ func Test_Mullvad_filterServers(t *testing.T) {
selection: settings.ServerSelection{
VPN: constants.Wireguard,
}.WithDefaults(providers.Mullvad),
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a"},
{VPN: constants.Wireguard, Hostname: "b"},
{VPN: constants.OpenVPN, Hostname: "c"},
},
filtered: []models.MullvadServer{
filtered: []models.Server{
{VPN: constants.Wireguard, Hostname: "b"},
},
},
@@ -58,12 +58,12 @@ func Test_Mullvad_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Countries: []string{"b"},
}.WithDefaults(providers.Mullvad),
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Country: "a"},
{VPN: constants.OpenVPN, Country: "b"},
{VPN: constants.OpenVPN, Country: "c"},
},
filtered: []models.MullvadServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Country: "b"},
},
},
@@ -71,12 +71,12 @@ func Test_Mullvad_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Cities: []string{"b"},
}.WithDefaults(providers.Mullvad),
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, City: "a"},
{VPN: constants.OpenVPN, City: "b"},
{VPN: constants.OpenVPN, City: "c"},
},
filtered: []models.MullvadServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, City: "b"},
},
},
@@ -84,12 +84,12 @@ func Test_Mullvad_filterServers(t *testing.T) {
selection: settings.ServerSelection{
ISPs: []string{"b"},
}.WithDefaults(providers.Mullvad),
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, ISP: "a"},
{VPN: constants.OpenVPN, ISP: "b"},
{VPN: constants.OpenVPN, ISP: "c"},
},
filtered: []models.MullvadServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, ISP: "b"},
},
},
@@ -97,12 +97,12 @@ func Test_Mullvad_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Mullvad),
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a"},
{VPN: constants.OpenVPN, Hostname: "b"},
{VPN: constants.OpenVPN, Hostname: "c"},
},
filtered: []models.MullvadServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Hostname: "b"},
},
},
@@ -110,12 +110,12 @@ func Test_Mullvad_filterServers(t *testing.T) {
selection: settings.ServerSelection{
OwnedOnly: boolPtr(true),
}.WithDefaults(providers.Mullvad),
servers: []models.MullvadServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a"},
{VPN: constants.OpenVPN, Hostname: "b", Owned: true},
{VPN: constants.OpenVPN, Hostname: "c"},
},
filtered: []models.MullvadServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Hostname: "b", Owned: true},
},
},
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Mullvad struct {
servers []models.MullvadServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.MullvadServer, randSource rand.Source) *Mullvad {
func New(servers []models.Server, randSource rand.Source) *Mullvad {
return &Mullvad{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -9,7 +9,7 @@ import (
)
func (n *Nordvpn) filterServers(selection settings.ServerSelection) (
servers []models.NordvpnServer, err error) {
servers []models.Server, err error) {
selectedNumbers := make([]string, len(selection.Numbers))
for i := range selection.Numbers {
selectedNumbers[i] = strconv.Itoa(int(selection.Numbers[i]))
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Nordvpn struct {
servers []models.NordvpnServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.NordvpnServer, randSource rand.Source) *Nordvpn {
func New(servers []models.Server, randSource rand.Source) *Nordvpn {
return &Nordvpn{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (p *Perfectprivacy) filterServers(selection settings.ServerSelection) (
servers []models.PerfectprivacyServer, err error) {
servers []models.Server, err error) {
for _, server := range p.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Perfectprivacy struct {
servers []models.PerfectprivacyServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.PerfectprivacyServer, randSource rand.Source) *Perfectprivacy {
func New(servers []models.Server, randSource rand.Source) *Perfectprivacy {
return &Perfectprivacy{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (p *Privado) filterServers(selection settings.ServerSelection) (
servers []models.PrivadoServer, err error) {
servers []models.Server, err error) {
for _, server := range p.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Privado struct {
servers []models.PrivadoServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.PrivadoServer, randSource rand.Source) *Privado {
func New(servers []models.Server, randSource rand.Source) *Privado {
return &Privado{
servers: servers,
randSource: randSource,
@@ -7,7 +7,7 @@ import (
)
func (p *PIA) filterServers(selection settings.ServerSelection) (
servers []models.PIAServer, err error) {
servers []models.Server, err error) {
for _, server := range p.servers {
switch {
case
@@ -29,7 +29,7 @@ var (
func (p *PIA) PortForward(ctx context.Context, client *http.Client,
logger utils.Logger, gateway net.IP, serverName string) (
port uint16, err error) {
var server models.PIAServer
var server models.Server
for _, server = range p.servers {
if server.ServerName == serverName {
break
@@ -9,7 +9,7 @@ import (
)
type PIA struct {
servers []models.PIAServer
servers []models.Server
randSource rand.Source
timeNow func() time.Time
// Port forwarding
@@ -17,7 +17,7 @@ type PIA struct {
authFilePath string
}
func New(servers []models.PIAServer, randSource rand.Source,
func New(servers []models.Server, randSource rand.Source,
timeNow func() time.Time) *PIA {
const jsonPortForwardPath = "/gluetun/piaportforward.json"
return &PIA{
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (p *Privatevpn) filterServers(selection settings.ServerSelection) (
servers []models.PrivatevpnServer, err error) {
servers []models.Server, err error) {
for _, server := range p.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Privatevpn struct {
servers []models.PrivatevpnServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.PrivatevpnServer, randSource rand.Source) *Privatevpn {
func New(servers []models.Server, randSource rand.Source) *Privatevpn {
return &Privatevpn{
servers: servers,
randSource: randSource,
+3 -3
View File
@@ -9,7 +9,7 @@ import (
)
func (p *Protonvpn) filterServers(selection settings.ServerSelection) (
servers []models.ProtonvpnServer, err error) {
servers []models.Server, err error) {
for _, server := range p.servers {
switch {
case
@@ -17,8 +17,8 @@ func (p *Protonvpn) filterServers(selection settings.ServerSelection) (
utils.FilterByPossibilities(server.Region, selection.Regions),
utils.FilterByPossibilities(server.City, selection.Cities),
utils.FilterByPossibilities(server.Hostname, selection.Hostnames),
utils.FilterByPossibilities(server.Name, selection.Names),
*selection.FreeOnly && !strings.Contains(strings.ToLower(server.Name), "free"):
utils.FilterByPossibilities(server.ServerName, selection.Names),
*selection.FreeOnly && !strings.Contains(strings.ToLower(server.ServerName), "free"):
default:
servers = append(servers, server)
}
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Protonvpn struct {
servers []models.ProtonvpnServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.ProtonvpnServer, randSource rand.Source) *Protonvpn {
func New(servers []models.Server, randSource rand.Source) *Protonvpn {
return &Protonvpn{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (p *Purevpn) filterServers(selection settings.ServerSelection) (
servers []models.PurevpnServer, err error) {
servers []models.Server, err error) {
for _, server := range p.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Purevpn struct {
servers []models.PurevpnServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.PurevpnServer, randSource rand.Source) *Purevpn {
func New(servers []models.Server, randSource rand.Source) *Purevpn {
return &Purevpn{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (s *Surfshark) filterServers(selection settings.ServerSelection) (
servers []models.SurfsharkServer, err error) {
servers []models.Server, err error) {
for _, server := range s.servers {
switch {
case
+16 -16
View File
@@ -18,9 +18,9 @@ func Test_Surfshark_filterServers(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.SurfsharkServer
servers []models.Server
selection settings.ServerSelection
filtered []models.SurfsharkServer
filtered []models.Server
err error
}{
"no server available": {
@@ -28,13 +28,13 @@ func Test_Surfshark_filterServers(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.SurfsharkServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
},
selection: settings.ServerSelection{}.WithDefaults(providers.Surfshark),
filtered: []models.SurfsharkServer{
filtered: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
@@ -44,12 +44,12 @@ func Test_Surfshark_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Regions: []string{"b"},
}.WithDefaults(providers.Surfshark),
servers: []models.SurfsharkServer{
servers: []models.Server{
{Region: "a", UDP: true},
{Region: "b", UDP: true},
{Region: "c", UDP: true},
},
filtered: []models.SurfsharkServer{
filtered: []models.Server{
{Region: "b", UDP: true},
},
},
@@ -57,12 +57,12 @@ func Test_Surfshark_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Countries: []string{"b"},
}.WithDefaults(providers.Surfshark),
servers: []models.SurfsharkServer{
servers: []models.Server{
{Country: "a", UDP: true},
{Country: "b", UDP: true},
{Country: "c", UDP: true},
},
filtered: []models.SurfsharkServer{
filtered: []models.Server{
{Country: "b", UDP: true},
},
},
@@ -70,12 +70,12 @@ func Test_Surfshark_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Cities: []string{"b"},
}.WithDefaults(providers.Surfshark),
servers: []models.SurfsharkServer{
servers: []models.Server{
{City: "a", UDP: true},
{City: "b", UDP: true},
{City: "c", UDP: true},
},
filtered: []models.SurfsharkServer{
filtered: []models.Server{
{City: "b", UDP: true},
},
},
@@ -83,12 +83,12 @@ func Test_Surfshark_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Surfshark),
servers: []models.SurfsharkServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
},
filtered: []models.SurfsharkServer{
filtered: []models.Server{
{Hostname: "b", UDP: true},
},
},
@@ -98,12 +98,12 @@ func Test_Surfshark_filterServers(t *testing.T) {
TCP: boolPtr(true),
},
}.WithDefaults(providers.Surfshark),
servers: []models.SurfsharkServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true, TCP: true},
{Hostname: "c", UDP: true},
},
filtered: []models.SurfsharkServer{
filtered: []models.Server{
{Hostname: "b", UDP: true, TCP: true},
},
},
@@ -111,12 +111,12 @@ func Test_Surfshark_filterServers(t *testing.T) {
selection: settings.ServerSelection{
MultiHopOnly: boolPtr(true),
}.WithDefaults(providers.Surfshark),
servers: []models.SurfsharkServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", MultiHop: true, UDP: true},
{Hostname: "c", UDP: true},
},
filtered: []models.SurfsharkServer{
filtered: []models.Server{
{Hostname: "b", MultiHop: true, UDP: true},
},
},
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Surfshark struct {
servers []models.SurfsharkServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.SurfsharkServer, randSource rand.Source) *Surfshark {
func New(servers []models.Server, randSource rand.Source) *Surfshark {
return &Surfshark{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (t *Torguard) filterServers(selection settings.ServerSelection) (
servers []models.TorguardServer, err error) {
servers []models.Server, err error) {
for _, server := range t.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Torguard struct {
servers []models.TorguardServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.TorguardServer, randSource rand.Source) *Torguard {
func New(servers []models.Server, randSource rand.Source) *Torguard {
return &Torguard{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (p *Provider) filterServers(selection settings.ServerSelection) (
servers []models.VPNUnlimitedServer, err error) {
servers []models.Server, err error) {
for _, server := range p.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Provider struct {
servers []models.VPNUnlimitedServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.VPNUnlimitedServer, randSource rand.Source) *Provider {
func New(servers []models.Server, randSource rand.Source) *Provider {
return &Provider{
servers: servers,
randSource: randSource,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (v *Vyprvpn) filterServers(selection settings.ServerSelection) (
servers []models.VyprvpnServer, err error) {
servers []models.Server, err error) {
for _, server := range v.servers {
switch {
case
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Vyprvpn struct {
servers []models.VyprvpnServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.VyprvpnServer, randSource rand.Source) *Vyprvpn {
func New(servers []models.Server, randSource rand.Source) *Vyprvpn {
return &Vyprvpn{
servers: servers,
randSource: randSource,
+4 -4
View File
@@ -18,7 +18,7 @@ func Test_Wevpn_GetConnection(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.WevpnServer
servers []models.Server
selection settings.ServerSelection
connection models.Connection
err error
@@ -30,7 +30,7 @@ func Test_Wevpn_GetConnection(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.WevpnServer{
servers: []models.Server{
{UDP: true, IPs: []net.IP{net.IPv4(1, 1, 1, 1)}},
{UDP: true, IPs: []net.IP{net.IPv4(2, 2, 2, 2)}},
{UDP: true, IPs: []net.IP{net.IPv4(3, 3, 3, 3)}},
@@ -47,7 +47,7 @@ func Test_Wevpn_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
TargetIP: net.IPv4(2, 2, 2, 2),
}.WithDefaults(providers.Wevpn),
servers: []models.WevpnServer{
servers: []models.Server{
{UDP: true, IPs: []net.IP{net.IPv4(1, 1, 1, 1)}},
{UDP: true, IPs: []net.IP{net.IPv4(2, 2, 2, 2)}},
{UDP: true, IPs: []net.IP{net.IPv4(3, 3, 3, 3)}},
@@ -63,7 +63,7 @@ func Test_Wevpn_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Wevpn),
servers: []models.WevpnServer{
servers: []models.Server{
{UDP: true, Hostname: "a", IPs: []net.IP{net.IPv4(1, 1, 1, 1)}},
{UDP: true, Hostname: "b", IPs: []net.IP{net.IPv4(2, 2, 2, 2)}},
{UDP: true, Hostname: "a", IPs: []net.IP{net.IPv4(3, 3, 3, 3)}},
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (w *Wevpn) filterServers(selection settings.ServerSelection) (
servers []models.WevpnServer, err error) {
servers []models.Server, err error) {
for _, server := range w.servers {
switch {
case
+10 -10
View File
@@ -18,9 +18,9 @@ func Test_Wevpn_filterServers(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.WevpnServer
servers []models.Server
selection settings.ServerSelection
filtered []models.WevpnServer
filtered []models.Server
err error
}{
"no server available": {
@@ -28,13 +28,13 @@ func Test_Wevpn_filterServers(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.WevpnServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
},
selection: settings.ServerSelection{}.WithDefaults(providers.Wevpn),
filtered: []models.WevpnServer{
filtered: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
@@ -44,12 +44,12 @@ func Test_Wevpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
OpenVPN: settings.OpenVPNSelection{TCP: boolPtr(true)},
}.WithDefaults(providers.Wevpn),
servers: []models.WevpnServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", TCP: true},
{Hostname: "c", UDP: true},
},
filtered: []models.WevpnServer{
filtered: []models.Server{
{Hostname: "b", TCP: true},
},
},
@@ -57,12 +57,12 @@ func Test_Wevpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Cities: []string{"b"},
}.WithDefaults(providers.Wevpn),
servers: []models.WevpnServer{
servers: []models.Server{
{City: "a", UDP: true},
{City: "b", UDP: true},
{City: "c", UDP: true},
},
filtered: []models.WevpnServer{
filtered: []models.Server{
{City: "b", UDP: true},
},
},
@@ -70,12 +70,12 @@ func Test_Wevpn_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Wevpn),
servers: []models.WevpnServer{
servers: []models.Server{
{Hostname: "a", UDP: true},
{Hostname: "b", UDP: true},
{Hostname: "c", UDP: true},
},
filtered: []models.WevpnServer{
filtered: []models.Server{
{Hostname: "b", UDP: true},
},
},
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Wevpn struct {
servers []models.WevpnServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.WevpnServer, randSource rand.Source) *Wevpn {
func New(servers []models.Server, randSource rand.Source) *Wevpn {
return &Wevpn{
servers: servers,
randSource: randSource,
@@ -18,7 +18,7 @@ func Test_Windscribe_GetConnection(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.WindscribeServer
servers []models.Server
selection settings.ServerSelection
connection models.Connection
err error
@@ -28,7 +28,7 @@ func Test_Windscribe_GetConnection(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.WindscribeServer{
servers: []models.Server{
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(1, 1, 1, 1)}},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(2, 2, 2, 2)}},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(3, 3, 3, 3)}},
@@ -45,7 +45,7 @@ func Test_Windscribe_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
TargetIP: net.IPv4(2, 2, 2, 2),
}.WithDefaults(providers.Windscribe),
servers: []models.WindscribeServer{
servers: []models.Server{
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(1, 1, 1, 1)}},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(2, 2, 2, 2)}},
{VPN: constants.OpenVPN, IPs: []net.IP{net.IPv4(3, 3, 3, 3)}},
@@ -61,7 +61,7 @@ func Test_Windscribe_GetConnection(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Windscribe),
servers: []models.WindscribeServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a", IPs: []net.IP{net.IPv4(1, 1, 1, 1)}},
{VPN: constants.OpenVPN, Hostname: "b", IPs: []net.IP{net.IPv4(2, 2, 2, 2)}},
{VPN: constants.OpenVPN, Hostname: "a", IPs: []net.IP{net.IPv4(3, 3, 3, 3)}},
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func (w *Windscribe) filterServers(selection settings.ServerSelection) (
servers []models.WindscribeServer, err error) {
servers []models.Server, err error) {
for _, server := range w.servers {
switch {
case
+12 -12
View File
@@ -17,9 +17,9 @@ func Test_Windscribe_filterServers(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
servers []models.WindscribeServer
servers []models.Server
selection settings.ServerSelection
filtered []models.WindscribeServer
filtered []models.Server
err error
}{
"no server available": {
@@ -27,13 +27,13 @@ func Test_Windscribe_filterServers(t *testing.T) {
err: errors.New("no server found: for VPN openvpn; protocol udp"),
},
"no filter": {
servers: []models.WindscribeServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a"},
{VPN: constants.OpenVPN, Hostname: "b"},
{VPN: constants.OpenVPN, Hostname: "c"},
},
selection: settings.ServerSelection{}.WithDefaults(providers.Windscribe),
filtered: []models.WindscribeServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a"},
{VPN: constants.OpenVPN, Hostname: "b"},
{VPN: constants.OpenVPN, Hostname: "c"},
@@ -43,12 +43,12 @@ func Test_Windscribe_filterServers(t *testing.T) {
selection: settings.ServerSelection{
VPN: constants.Wireguard,
}.WithDefaults(providers.Windscribe),
servers: []models.WindscribeServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a"},
{VPN: constants.Wireguard, Hostname: "b"},
{VPN: constants.OpenVPN, Hostname: "c"},
},
filtered: []models.WindscribeServer{
filtered: []models.Server{
{VPN: constants.Wireguard, Hostname: "b"},
},
},
@@ -56,12 +56,12 @@ func Test_Windscribe_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Regions: []string{"b"},
}.WithDefaults(providers.Windscribe),
servers: []models.WindscribeServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Region: "a"},
{VPN: constants.OpenVPN, Region: "b"},
{VPN: constants.OpenVPN, Region: "c"},
},
filtered: []models.WindscribeServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Region: "b"},
},
},
@@ -69,12 +69,12 @@ func Test_Windscribe_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Cities: []string{"b"},
}.WithDefaults(providers.Windscribe),
servers: []models.WindscribeServer{
servers: []models.Server{
{VPN: constants.OpenVPN, City: "a"},
{VPN: constants.OpenVPN, City: "b"},
{VPN: constants.OpenVPN, City: "c"},
},
filtered: []models.WindscribeServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, City: "b"},
},
},
@@ -82,12 +82,12 @@ func Test_Windscribe_filterServers(t *testing.T) {
selection: settings.ServerSelection{
Hostnames: []string{"b"},
}.WithDefaults(providers.Windscribe),
servers: []models.WindscribeServer{
servers: []models.Server{
{VPN: constants.OpenVPN, Hostname: "a"},
{VPN: constants.OpenVPN, Hostname: "b"},
{VPN: constants.OpenVPN, Hostname: "c"},
},
filtered: []models.WindscribeServer{
filtered: []models.Server{
{VPN: constants.OpenVPN, Hostname: "b"},
},
},
+2 -2
View File
@@ -9,12 +9,12 @@ import (
)
type Windscribe struct {
servers []models.WindscribeServer
servers []models.Server
randSource rand.Source
utils.NoPortForwarder
}
func New(servers []models.WindscribeServer, randSource rand.Source) *Windscribe {
func New(servers []models.Server, randSource rand.Source) *Windscribe {
return &Windscribe{
servers: servers,
randSource: randSource,
+24 -193
View File
@@ -4,6 +4,7 @@ import (
"strconv"
"time"
"github.com/qdm12/gluetun/internal/constants/providers"
"github.com/qdm12/gluetun/internal/models"
)
@@ -29,205 +30,35 @@ func (s *Storage) logTimeDiff(provider string, persistedUnix, hardcodedUnix int6
func (s *Storage) mergeServers(hardcoded, persisted models.AllServers) models.AllServers {
return models.AllServers{
Version: hardcoded.Version,
Cyberghost: s.mergeCyberghost(hardcoded.Cyberghost, persisted.Cyberghost),
Expressvpn: s.mergeExpressvpn(hardcoded.Expressvpn, persisted.Expressvpn),
Fastestvpn: s.mergeFastestvpn(hardcoded.Fastestvpn, persisted.Fastestvpn),
HideMyAss: s.mergeHideMyAss(hardcoded.HideMyAss, persisted.HideMyAss),
Ipvanish: s.mergeIpvanish(hardcoded.Ipvanish, persisted.Ipvanish),
Ivpn: s.mergeIvpn(hardcoded.Ivpn, persisted.Ivpn),
Mullvad: s.mergeMullvad(hardcoded.Mullvad, persisted.Mullvad),
Nordvpn: s.mergeNordVPN(hardcoded.Nordvpn, persisted.Nordvpn),
Perfectprivacy: s.mergePerfectprivacy(hardcoded.Perfectprivacy, persisted.Perfectprivacy),
Privado: s.mergePrivado(hardcoded.Privado, persisted.Privado),
Pia: s.mergePIA(hardcoded.Pia, persisted.Pia),
Privatevpn: s.mergePrivatevpn(hardcoded.Privatevpn, persisted.Privatevpn),
Protonvpn: s.mergeProtonvpn(hardcoded.Protonvpn, persisted.Protonvpn),
Purevpn: s.mergePureVPN(hardcoded.Purevpn, persisted.Purevpn),
Surfshark: s.mergeSurfshark(hardcoded.Surfshark, persisted.Surfshark),
Torguard: s.mergeTorguard(hardcoded.Torguard, persisted.Torguard),
VPNUnlimited: s.mergeVPNUnlimited(hardcoded.VPNUnlimited, persisted.VPNUnlimited),
Vyprvpn: s.mergeVyprvpn(hardcoded.Vyprvpn, persisted.Vyprvpn),
Wevpn: s.mergeWevpn(hardcoded.Wevpn, persisted.Wevpn),
Windscribe: s.mergeWindscribe(hardcoded.Windscribe, persisted.Windscribe),
Cyberghost: s.mergeProviderServers(providers.Cyberghost, hardcoded.Cyberghost, persisted.Cyberghost),
Expressvpn: s.mergeProviderServers(providers.Expressvpn, hardcoded.Expressvpn, persisted.Expressvpn),
Fastestvpn: s.mergeProviderServers(providers.Fastestvpn, hardcoded.Fastestvpn, persisted.Fastestvpn),
HideMyAss: s.mergeProviderServers(providers.HideMyAss, hardcoded.HideMyAss, persisted.HideMyAss),
Ipvanish: s.mergeProviderServers(providers.Ipvanish, hardcoded.Ipvanish, persisted.Ipvanish),
Ivpn: s.mergeProviderServers(providers.Ivpn, hardcoded.Ivpn, persisted.Ivpn),
Mullvad: s.mergeProviderServers(providers.Mullvad, hardcoded.Mullvad, persisted.Mullvad),
Nordvpn: s.mergeProviderServers(providers.Nordvpn, hardcoded.Nordvpn, persisted.Nordvpn),
Perfectprivacy: s.mergeProviderServers(providers.Perfectprivacy, hardcoded.Perfectprivacy, persisted.Perfectprivacy),
Privado: s.mergeProviderServers(providers.Privado, hardcoded.Privado, persisted.Privado),
Pia: s.mergeProviderServers(providers.PrivateInternetAccess, hardcoded.Pia, persisted.Pia),
Privatevpn: s.mergeProviderServers(providers.Privatevpn, hardcoded.Privatevpn, persisted.Privatevpn),
Protonvpn: s.mergeProviderServers(providers.Protonvpn, hardcoded.Protonvpn, persisted.Protonvpn),
Purevpn: s.mergeProviderServers(providers.Purevpn, hardcoded.Purevpn, persisted.Purevpn),
Surfshark: s.mergeProviderServers(providers.Surfshark, hardcoded.Surfshark, persisted.Surfshark),
Torguard: s.mergeProviderServers(providers.Torguard, hardcoded.Torguard, persisted.Torguard),
VPNUnlimited: s.mergeProviderServers(providers.VPNUnlimited, hardcoded.VPNUnlimited, persisted.VPNUnlimited),
Vyprvpn: s.mergeProviderServers(providers.Vyprvpn, hardcoded.Vyprvpn, persisted.Vyprvpn),
Wevpn: s.mergeProviderServers(providers.Wevpn, hardcoded.Wevpn, persisted.Wevpn),
Windscribe: s.mergeProviderServers(providers.Windscribe, hardcoded.Windscribe, persisted.Windscribe),
}
}
func (s *Storage) mergeCyberghost(hardcoded, persisted models.CyberghostServers) models.CyberghostServers {
func (s *Storage) mergeProviderServers(provider string,
hardcoded, persisted models.Servers) (merged models.Servers) {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Cyberghost", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeExpressvpn(hardcoded, persisted models.ExpressvpnServers) models.ExpressvpnServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("ExpressVPN", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeFastestvpn(hardcoded, persisted models.FastestvpnServers) models.FastestvpnServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("FastestVPN", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeHideMyAss(hardcoded, persisted models.HideMyAssServers) models.HideMyAssServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("HideMyAss", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeIpvanish(hardcoded, persisted models.IpvanishServers) models.IpvanishServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Ipvanish", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeIvpn(hardcoded, persisted models.IvpnServers) models.IvpnServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Ivpn", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeMullvad(hardcoded, persisted models.MullvadServers) models.MullvadServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Mullvad", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeNordVPN(hardcoded, persisted models.NordvpnServers) models.NordvpnServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("NordVPN", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergePerfectprivacy(hardcoded, persisted models.PerfectprivacyServers) models.PerfectprivacyServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Perfect Privacy", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergePrivado(hardcoded, persisted models.PrivadoServers) models.PrivadoServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Privado", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergePIA(hardcoded, persisted models.PiaServers) models.PiaServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Private Internet Access", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergePrivatevpn(hardcoded, persisted models.PrivatevpnServers) models.PrivatevpnServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("PrivateVPN", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeProtonvpn(hardcoded, persisted models.ProtonvpnServers) models.ProtonvpnServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("ProtonVPN", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergePureVPN(hardcoded, persisted models.PurevpnServers) models.PurevpnServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("PureVPN", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeSurfshark(hardcoded, persisted models.SurfsharkServers) models.SurfsharkServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Surfshark", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeTorguard(hardcoded, persisted models.TorguardServers) models.TorguardServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Torguard", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeVPNUnlimited(hardcoded, persisted models.VPNUnlimitedServers) models.VPNUnlimitedServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("VPN Unlimited", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeVyprvpn(hardcoded, persisted models.VyprvpnServers) models.VyprvpnServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("VyprVPN", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeWevpn(hardcoded, persisted models.WevpnServers) models.WevpnServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("WeVPN", persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
func (s *Storage) mergeWindscribe(hardcoded, persisted models.WindscribeServers) models.WindscribeServers {
if persisted.Timestamp <= hardcoded.Timestamp {
return hardcoded
}
s.logTimeDiff("Windscribe", persisted.Timestamp, hardcoded.Timestamp)
s.logTimeDiff(provider, persisted.Timestamp, hardcoded.Timestamp)
return persisted
}
+60 -60
View File
@@ -30,26 +30,26 @@ func Test_extractServersFromBytes(t *testing.T) {
"different versions": {
b: []byte(`{}`),
hardcoded: models.AllServers{
Cyberghost: models.CyberghostServers{Version: 1},
Expressvpn: models.ExpressvpnServers{Version: 1},
Fastestvpn: models.FastestvpnServers{Version: 1},
HideMyAss: models.HideMyAssServers{Version: 1},
Ipvanish: models.IpvanishServers{Version: 1},
Ivpn: models.IvpnServers{Version: 1},
Mullvad: models.MullvadServers{Version: 1},
Nordvpn: models.NordvpnServers{Version: 1},
Perfectprivacy: models.PerfectprivacyServers{Version: 1},
Privado: models.PrivadoServers{Version: 1},
Pia: models.PiaServers{Version: 1},
Privatevpn: models.PrivatevpnServers{Version: 1},
Protonvpn: models.ProtonvpnServers{Version: 1},
Purevpn: models.PurevpnServers{Version: 1},
Surfshark: models.SurfsharkServers{Version: 1},
Torguard: models.TorguardServers{Version: 1},
VPNUnlimited: models.VPNUnlimitedServers{Version: 1},
Vyprvpn: models.VyprvpnServers{Version: 1},
Wevpn: models.WevpnServers{Version: 1},
Windscribe: models.WindscribeServers{Version: 1},
Cyberghost: models.Servers{Version: 1},
Expressvpn: models.Servers{Version: 1},
Fastestvpn: models.Servers{Version: 1},
HideMyAss: models.Servers{Version: 1},
Ipvanish: models.Servers{Version: 1},
Ivpn: models.Servers{Version: 1},
Mullvad: models.Servers{Version: 1},
Nordvpn: models.Servers{Version: 1},
Perfectprivacy: models.Servers{Version: 1},
Privado: models.Servers{Version: 1},
Pia: models.Servers{Version: 1},
Privatevpn: models.Servers{Version: 1},
Protonvpn: models.Servers{Version: 1},
Purevpn: models.Servers{Version: 1},
Surfshark: models.Servers{Version: 1},
Torguard: models.Servers{Version: 1},
VPNUnlimited: models.Servers{Version: 1},
Vyprvpn: models.Servers{Version: 1},
Wevpn: models.Servers{Version: 1},
Windscribe: models.Servers{Version: 1},
},
logged: []string{
"Cyberghost servers from file discarded because they have version 0 and hardcoded servers have version 1",
@@ -98,48 +98,48 @@ func Test_extractServersFromBytes(t *testing.T) {
"windscribe": {"version": 1, "timestamp": 1}
}`),
hardcoded: models.AllServers{
Cyberghost: models.CyberghostServers{Version: 1},
Expressvpn: models.ExpressvpnServers{Version: 1},
Fastestvpn: models.FastestvpnServers{Version: 1},
HideMyAss: models.HideMyAssServers{Version: 1},
Ipvanish: models.IpvanishServers{Version: 1},
Ivpn: models.IvpnServers{Version: 1},
Mullvad: models.MullvadServers{Version: 1},
Nordvpn: models.NordvpnServers{Version: 1},
Perfectprivacy: models.PerfectprivacyServers{Version: 1},
Privado: models.PrivadoServers{Version: 1},
Pia: models.PiaServers{Version: 1},
Privatevpn: models.PrivatevpnServers{Version: 1},
Protonvpn: models.ProtonvpnServers{Version: 1},
Purevpn: models.PurevpnServers{Version: 1},
Surfshark: models.SurfsharkServers{Version: 1},
Torguard: models.TorguardServers{Version: 1},
VPNUnlimited: models.VPNUnlimitedServers{Version: 1},
Vyprvpn: models.VyprvpnServers{Version: 1},
Wevpn: models.WevpnServers{Version: 1},
Windscribe: models.WindscribeServers{Version: 1},
Cyberghost: models.Servers{Version: 1},
Expressvpn: models.Servers{Version: 1},
Fastestvpn: models.Servers{Version: 1},
HideMyAss: models.Servers{Version: 1},
Ipvanish: models.Servers{Version: 1},
Ivpn: models.Servers{Version: 1},
Mullvad: models.Servers{Version: 1},
Nordvpn: models.Servers{Version: 1},
Perfectprivacy: models.Servers{Version: 1},
Privado: models.Servers{Version: 1},
Pia: models.Servers{Version: 1},
Privatevpn: models.Servers{Version: 1},
Protonvpn: models.Servers{Version: 1},
Purevpn: models.Servers{Version: 1},
Surfshark: models.Servers{Version: 1},
Torguard: models.Servers{Version: 1},
VPNUnlimited: models.Servers{Version: 1},
Vyprvpn: models.Servers{Version: 1},
Wevpn: models.Servers{Version: 1},
Windscribe: models.Servers{Version: 1},
},
persisted: models.AllServers{
Cyberghost: models.CyberghostServers{Version: 1, Timestamp: 1},
Expressvpn: models.ExpressvpnServers{Version: 1, Timestamp: 1},
Fastestvpn: models.FastestvpnServers{Version: 1, Timestamp: 1},
HideMyAss: models.HideMyAssServers{Version: 1, Timestamp: 1},
Ipvanish: models.IpvanishServers{Version: 1, Timestamp: 1},
Ivpn: models.IvpnServers{Version: 1, Timestamp: 1},
Mullvad: models.MullvadServers{Version: 1, Timestamp: 1},
Nordvpn: models.NordvpnServers{Version: 1, Timestamp: 1},
Perfectprivacy: models.PerfectprivacyServers{Version: 1, Timestamp: 1},
Privado: models.PrivadoServers{Version: 1, Timestamp: 1},
Pia: models.PiaServers{Version: 1, Timestamp: 1},
Privatevpn: models.PrivatevpnServers{Version: 1, Timestamp: 1},
Protonvpn: models.ProtonvpnServers{Version: 1, Timestamp: 1},
Purevpn: models.PurevpnServers{Version: 1, Timestamp: 1},
Surfshark: models.SurfsharkServers{Version: 1, Timestamp: 1},
Torguard: models.TorguardServers{Version: 1, Timestamp: 1},
VPNUnlimited: models.VPNUnlimitedServers{Version: 1, Timestamp: 1},
Vyprvpn: models.VyprvpnServers{Version: 1, Timestamp: 1},
Wevpn: models.WevpnServers{Version: 1, Timestamp: 1},
Windscribe: models.WindscribeServers{Version: 1, Timestamp: 1},
Cyberghost: models.Servers{Version: 1, Timestamp: 1},
Expressvpn: models.Servers{Version: 1, Timestamp: 1},
Fastestvpn: models.Servers{Version: 1, Timestamp: 1},
HideMyAss: models.Servers{Version: 1, Timestamp: 1},
Ipvanish: models.Servers{Version: 1, Timestamp: 1},
Ivpn: models.Servers{Version: 1, Timestamp: 1},
Mullvad: models.Servers{Version: 1, Timestamp: 1},
Nordvpn: models.Servers{Version: 1, Timestamp: 1},
Perfectprivacy: models.Servers{Version: 1, Timestamp: 1},
Privado: models.Servers{Version: 1, Timestamp: 1},
Pia: models.Servers{Version: 1, Timestamp: 1},
Privatevpn: models.Servers{Version: 1, Timestamp: 1},
Protonvpn: models.Servers{Version: 1, Timestamp: 1},
Purevpn: models.Servers{Version: 1, Timestamp: 1},
Surfshark: models.Servers{Version: 1, Timestamp: 1},
Torguard: models.Servers{Version: 1, Timestamp: 1},
VPNUnlimited: models.Servers{Version: 1, Timestamp: 1},
Vyprvpn: models.Servers{Version: 1, Timestamp: 1},
Wevpn: models.Servers{Version: 1, Timestamp: 1},
Windscribe: models.Servers{Version: 1, Timestamp: 1},
},
},
}
+26323 -26324
View File
File diff suppressed because it is too large Load Diff
@@ -7,7 +7,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
type hostToServer map[string]models.CyberghostServer
type hostToServer map[string]models.Server
func getPossibleServers() (possibleServers hostToServer) {
groupIDToProtocol := getGroupIDToProtocol()
@@ -24,7 +24,7 @@ func getPossibleServers() (possibleServers hostToServer) {
for countryCode, country := range possibleCountryCodes {
const domain = "cg-dialup.net"
possibleHost := groupID + "-" + countryCode + "." + domain
possibleServer := models.CyberghostServer{
possibleServer := models.Server{
Hostname: possibleHost,
Country: country,
TCP: protocol == constants.TCP,
@@ -58,8 +58,8 @@ func (hts hostToServer) adaptWithIPs(hostToIPs map[string][]net.IP) {
}
}
func (hts hostToServer) toSlice() (servers []models.CyberghostServer) {
servers = make([]models.CyberghostServer, 0, len(hts))
func (hts hostToServer) toSlice() (servers []models.Server) {
servers = make([]models.Server, 0, len(hts))
for _, server := range hts {
servers = append(servers, server)
}
@@ -10,7 +10,7 @@ import (
)
func GetServers(ctx context.Context, presolver resolver.Parallel,
minServers int) (servers []models.CyberghostServer, err error) {
minServers int) (servers []models.Server, err error) {
possibleServers := getPossibleServers()
possibleHosts := possibleServers.hostsSlice()
@@ -6,7 +6,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func sortServers(servers []models.CyberghostServer) {
func sortServers(servers []models.Server) {
sort.Slice(servers, func(i, j int) bool {
if servers[i].Country == servers[j].Country {
return servers[i].Hostname < servers[j].Hostname
@@ -5,8 +5,8 @@ import (
)
//nolint:lll
func hardcodedServers() (servers []models.ExpressvpnServer) {
return []models.ExpressvpnServer{
func hardcodedServers() (servers []models.Server) {
return []models.Server{
{Country: "Albania", Hostname: "albania-ca-version-2.expressnetw.com"},
{Country: "Algeria", Hostname: "algeria-ca-version-2.expressnetw.com"},
{Country: "Andorra", Hostname: "andorra-ca-version-2.expressnetw.com"},
@@ -16,7 +16,7 @@ var ErrNotEnoughServers = errors.New("not enough servers found")
func GetServers(ctx context.Context, unzipper unzip.Unzipper,
presolver resolver.Parallel, minServers int) (
servers []models.ExpressvpnServer, warnings []string, err error) {
servers []models.Server, warnings []string, err error) {
servers = hardcodedServers()
hosts := make([]string, len(servers))
@@ -6,7 +6,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func sortServers(servers []models.ExpressvpnServer) {
func sortServers(servers []models.Server) {
sort.Slice(servers, func(i, j int) bool {
if servers[i].Country == servers[j].Country {
if servers[i].City == servers[j].City {
@@ -6,7 +6,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
type hostToServer map[string]models.FastestvpnServer
type hostToServer map[string]models.Server
func (hts hostToServer) add(host, country string, tcp, udp bool) {
server, ok := hts[host]
@@ -44,8 +44,8 @@ func (hts hostToServer) adaptWithIPs(hostToIPs map[string][]net.IP) {
}
}
func (hts hostToServer) toServersSlice() (servers []models.FastestvpnServer) {
servers = make([]models.FastestvpnServer, 0, len(hts))
func (hts hostToServer) toServersSlice() (servers []models.Server) {
servers = make([]models.Server, 0, len(hts))
for _, server := range hts {
servers = append(servers, server)
}
@@ -18,7 +18,7 @@ var ErrNotEnoughServers = errors.New("not enough servers found")
func GetServers(ctx context.Context, unzipper unzip.Unzipper,
presolver resolver.Parallel, minServers int) (
servers []models.FastestvpnServer, warnings []string, err error) {
servers []models.Server, warnings []string, err error) {
const url = "https://support.fastestvpn.com/download/openvpn-tcp-udp-config-files"
contents, err := unzipper.FetchAndExtract(ctx, url)
if err != nil {
@@ -6,7 +6,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func sortServers(servers []models.FastestvpnServer) {
func sortServers(servers []models.Server) {
sort.Slice(servers, func(i, j int) bool {
if servers[i].Country == servers[j].Country {
return servers[i].Hostname < servers[j].Hostname
@@ -16,7 +16,7 @@ var ErrNotEnoughServers = errors.New("not enough servers found")
func GetServers(ctx context.Context, client *http.Client,
presolver resolver.Parallel, minServers int) (
servers []models.HideMyAssServer, warnings []string, err error) {
servers []models.Server, warnings []string, err error) {
tcpHostToURL, udpHostToURL, err := getAllHostToURL(ctx, client)
if err != nil {
return nil, nil, err
@@ -34,7 +34,7 @@ func GetServers(ctx context.Context, client *http.Client,
return nil, warnings, err
}
servers = make([]models.HideMyAssServer, 0, len(hostToIPs))
servers = make([]models.Server, 0, len(hostToIPs))
for host, IPs := range hostToIPs {
tcpURL, tcp := tcpHostToURL[host]
udpURL, udp := udpHostToURL[host]
@@ -50,7 +50,7 @@ func GetServers(ctx context.Context, client *http.Client,
}
country, region, city := parseOpenvpnURL(url, protocol)
server := models.HideMyAssServer{
server := models.Server{
Country: country,
Region: region,
City: city,
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func sortServers(servers []models.HideMyAssServer) {
func sortServers(servers []models.Server) {
sort.Slice(servers, func(i, j int) bool {
if servers[i].Country == servers[j].Country {
if servers[i].Region == servers[j].Region {
@@ -7,7 +7,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
type hostToServer map[string]models.IpvanishServer
type hostToServer map[string]models.Server
func (hts hostToServer) add(host, country, city string, tcp, udp bool) {
server, ok := hts[host]
@@ -49,8 +49,8 @@ func (hts hostToServer) adaptWithIPs(hostToIPs map[string][]net.IP) {
}
}
func (hts hostToServer) toServersSlice() (servers []models.IpvanishServer) {
servers = make([]models.IpvanishServer, 0, len(hts))
func (hts hostToServer) toServersSlice() (servers []models.Server) {
servers = make([]models.Server, 0, len(hts))
for _, server := range hts {
servers = append(servers, server)
}
@@ -47,7 +47,7 @@ func Test_hostToServer_add(t *testing.T) {
udp: true,
expectedHTS: hostToServer{
"existing host": {},
"host": models.IpvanishServer{
"host": models.Server{
Hostname: "host",
Country: "country",
City: "city",
@@ -58,7 +58,7 @@ func Test_hostToServer_add(t *testing.T) {
},
"extend existing server": {
initialHTS: hostToServer{
"host": models.IpvanishServer{
"host": models.Server{
Hostname: "host",
Country: "country",
City: "city",
@@ -71,7 +71,7 @@ func Test_hostToServer_add(t *testing.T) {
tcp: false,
udp: true,
expectedHTS: hostToServer{
"host": models.IpvanishServer{
"host": models.Server{
Hostname: "host",
Country: "country",
City: "city",
@@ -138,14 +138,14 @@ func Test_hostToServer_adaptWithIPs(t *testing.T) {
"A": {{1, 2, 3, 4}},
},
expectedHTS: hostToServer{
"A": models.IpvanishServer{
"A": models.Server{
IPs: []net.IP{{1, 2, 3, 4}},
},
},
},
"add IPs to existing server": {
initialHTS: hostToServer{
"A": models.IpvanishServer{
"A": models.Server{
Country: "country",
},
},
@@ -153,7 +153,7 @@ func Test_hostToServer_adaptWithIPs(t *testing.T) {
"A": {{1, 2, 3, 4}},
},
expectedHTS: hostToServer{
"A": models.IpvanishServer{
"A": models.Server{
Country: "country",
IPs: []net.IP{{1, 2, 3, 4}},
},
@@ -161,7 +161,7 @@ func Test_hostToServer_adaptWithIPs(t *testing.T) {
},
"remove server without IP": {
initialHTS: hostToServer{
"A": models.IpvanishServer{
"A": models.Server{
Country: "country",
},
},
@@ -183,18 +183,18 @@ func Test_hostToServer_toServersSlice(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
hts hostToServer
servers []models.IpvanishServer
servers []models.Server
}{
"empty host to server": {
hts: hostToServer{},
servers: []models.IpvanishServer{},
servers: []models.Server{},
},
"multiple servers": {
hts: hostToServer{
"A": {Country: "A"},
"B": {Country: "B"},
},
servers: []models.IpvanishServer{
servers: []models.Server{
{Country: "A"},
{Country: "B"},
},
@@ -18,7 +18,7 @@ var ErrNotEnoughServers = errors.New("not enough servers found")
func GetServers(ctx context.Context, unzipper unzip.Unzipper,
presolver resolver.Parallel, minServers int) (
servers []models.IpvanishServer, warnings []string, err error) {
servers []models.Server, warnings []string, err error) {
const url = "https://www.ipvanish.com/software/configs/configs.zip"
contents, err := unzipper.FetchAndExtract(ctx, url)
if err != nil {
@@ -34,7 +34,7 @@ func Test_GetServers(t *testing.T) {
resolveErr error
// Output
servers []models.IpvanishServer
servers []models.Server
warnings []string
err error
}{
@@ -109,7 +109,7 @@ func Test_GetServers(t *testing.T) {
"hostb": {{3, 3, 3, 3}, {4, 4, 4, 4}},
},
resolveWarnings: []string{"resolve warning"},
servers: []models.IpvanishServer{
servers: []models.Server{
{Country: "Canada", City: "City A", Hostname: "hosta", UDP: true, IPs: []net.IP{{1, 1, 1, 1}, {2, 2, 2, 2}}},
{Country: "Luxembourg", City: "City B", Hostname: "hostb", UDP: true, IPs: []net.IP{{3, 3, 3, 3}, {4, 4, 4, 4}}},
},
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
func sortServers(servers []models.IpvanishServer) {
func sortServers(servers []models.Server) {
sort.Slice(servers, func(i, j int) bool {
if servers[i].Country == servers[j].Country {
if servers[i].City == servers[j].City {
@@ -10,18 +10,18 @@ import (
func Test_sortServers(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
initialServers []models.IpvanishServer
sortedServers []models.IpvanishServer
initialServers []models.Server
sortedServers []models.Server
}{
"no server": {},
"sorted servers": {
initialServers: []models.IpvanishServer{
initialServers: []models.Server{
{Country: "B", City: "A", Hostname: "A"},
{Country: "A", City: "A", Hostname: "B"},
{Country: "A", City: "A", Hostname: "A"},
{Country: "A", City: "B", Hostname: "A"},
},
sortedServers: []models.IpvanishServer{
sortedServers: []models.Server{
{Country: "A", City: "A", Hostname: "A"},
{Country: "A", City: "A", Hostname: "B"},
{Country: "A", City: "B", Hostname: "A"},

Some files were not shown because too many files have changed in this diff Show More