mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-07 04:20:12 +02:00
chore(models): common Server & Servers for all providers (#943)
This commit is contained in:
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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"`
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)}},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)}},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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)}},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
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,
|
||||
|
||||
@@ -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}}},
|
||||
},
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user