chore(validation): uniformize server filters build

This commit is contained in:
Quentin McGaw
2022-04-17 16:52:40 +00:00
parent 1a6f26fa3b
commit a9cfd16d53
23 changed files with 172 additions and 654 deletions

View File

@@ -144,82 +144,82 @@ func getLocationFilterChoices(vpnServiceProvider string, ss *ServerSelection,
case providers.Custom: case providers.Custom:
case providers.Cyberghost: case providers.Cyberghost:
servers := allServers.GetCyberghost() servers := allServers.GetCyberghost()
countryChoices = validation.CyberghostCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
hostnameChoices = validation.CyberghostHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Expressvpn: case providers.Expressvpn:
servers := allServers.GetExpressvpn() servers := allServers.GetExpressvpn()
countryChoices = validation.ExpressvpnCountriesChoices(servers) countryChoices = validation.ExtractCountries(servers)
cityChoices = validation.ExpressvpnCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.ExpressvpnHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Fastestvpn: case providers.Fastestvpn:
servers := allServers.GetFastestvpn() servers := allServers.GetFastestvpn()
countryChoices = validation.FastestvpnCountriesChoices(servers) countryChoices = validation.ExtractCountries(servers)
hostnameChoices = validation.FastestvpnHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.HideMyAss: case providers.HideMyAss:
servers := allServers.GetHideMyAss() servers := allServers.GetHideMyAss()
countryChoices = validation.HideMyAssCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
regionChoices = validation.HideMyAssRegionChoices(servers) regionChoices = validation.ExtractRegions(servers)
cityChoices = validation.HideMyAssCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.HideMyAssHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Ipvanish: case providers.Ipvanish:
servers := allServers.GetIpvanish() servers := allServers.GetIpvanish()
countryChoices = validation.IpvanishCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
cityChoices = validation.IpvanishCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.IpvanishHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Ivpn: case providers.Ivpn:
servers := allServers.GetIvpn() servers := allServers.GetIvpn()
countryChoices = validation.IvpnCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
cityChoices = validation.IvpnCityChoices(servers) cityChoices = validation.ExtractCities(servers)
ispChoices = validation.IvpnISPChoices(servers) ispChoices = validation.ExtractISPs(servers)
hostnameChoices = validation.IvpnHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Mullvad: case providers.Mullvad:
servers := allServers.GetMullvad() servers := allServers.GetMullvad()
countryChoices = validation.MullvadCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
cityChoices = validation.MullvadCityChoices(servers) cityChoices = validation.ExtractCities(servers)
ispChoices = validation.MullvadISPChoices(servers) ispChoices = validation.ExtractISPs(servers)
hostnameChoices = validation.MullvadHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Nordvpn: case providers.Nordvpn:
servers := allServers.GetNordvpn() servers := allServers.GetNordvpn()
regionChoices = validation.NordvpnRegionChoices(servers) regionChoices = validation.ExtractRegions(servers)
hostnameChoices = validation.NordvpnHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Perfectprivacy: case providers.Perfectprivacy:
servers := allServers.GetPerfectprivacy() servers := allServers.GetPerfectprivacy()
cityChoices = validation.PerfectprivacyCityChoices(servers) cityChoices = validation.ExtractCities(servers)
case providers.Privado: case providers.Privado:
servers := allServers.GetPrivado() servers := allServers.GetPrivado()
countryChoices = validation.PrivadoCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
regionChoices = validation.PrivadoRegionChoices(servers) regionChoices = validation.ExtractRegions(servers)
cityChoices = validation.PrivadoCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.PrivadoHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.PrivateInternetAccess: case providers.PrivateInternetAccess:
servers := allServers.GetPia() servers := allServers.GetPia()
regionChoices = validation.PIAGeoChoices(servers) regionChoices = validation.ExtractRegions(servers)
hostnameChoices = validation.PIAHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
nameChoices = validation.PIANameChoices(servers) nameChoices = validation.ExtractServerNames(servers)
case providers.Privatevpn: case providers.Privatevpn:
servers := allServers.GetPrivatevpn() servers := allServers.GetPrivatevpn()
countryChoices = validation.PrivatevpnCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
cityChoices = validation.PrivatevpnCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.PrivatevpnHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Protonvpn: case providers.Protonvpn:
servers := allServers.GetProtonvpn() servers := allServers.GetProtonvpn()
countryChoices = validation.ProtonvpnCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
regionChoices = validation.ProtonvpnRegionChoices(servers) regionChoices = validation.ExtractRegions(servers)
cityChoices = validation.ProtonvpnCityChoices(servers) cityChoices = validation.ExtractCities(servers)
nameChoices = validation.ProtonvpnNameChoices(servers) nameChoices = validation.ExtractServerNames(servers)
hostnameChoices = validation.ProtonvpnHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Purevpn: case providers.Purevpn:
servers := allServers.GetPurevpn() servers := allServers.GetPurevpn()
countryChoices = validation.PurevpnCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
regionChoices = validation.PurevpnRegionChoices(servers) regionChoices = validation.ExtractRegions(servers)
cityChoices = validation.PurevpnCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.PurevpnHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Surfshark: case providers.Surfshark:
servers := allServers.GetSurfshark() servers := allServers.GetSurfshark()
countryChoices = validation.SurfsharkCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
cityChoices = validation.SurfsharkCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.SurfsharkHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
regionChoices = validation.SurfsharkRegionChoices(servers) regionChoices = validation.ExtractRegions(servers)
// TODO v4 remove // TODO v4 remove
regionChoices = append(regionChoices, validation.SurfsharkRetroLocChoices()...) regionChoices = append(regionChoices, validation.SurfsharkRetroLocChoices()...)
if err := helpers.AreAllOneOf(ss.Regions, regionChoices); err != nil { if err := helpers.AreAllOneOf(ss.Regions, regionChoices); err != nil {
@@ -230,26 +230,26 @@ func getLocationFilterChoices(vpnServiceProvider string, ss *ServerSelection,
*ss = surfsharkRetroRegion(*ss) *ss = surfsharkRetroRegion(*ss)
case providers.Torguard: case providers.Torguard:
servers := allServers.GetTorguard() servers := allServers.GetTorguard()
countryChoices = validation.TorguardCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
cityChoices = validation.TorguardCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.TorguardHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.VPNUnlimited: case providers.VPNUnlimited:
servers := allServers.GetVPNUnlimited() servers := allServers.GetVPNUnlimited()
countryChoices = validation.VPNUnlimitedCountryChoices(servers) countryChoices = validation.ExtractCountries(servers)
cityChoices = validation.VPNUnlimitedCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.VPNUnlimitedHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Vyprvpn: case providers.Vyprvpn:
servers := allServers.GetVyprvpn() servers := allServers.GetVyprvpn()
regionChoices = validation.VyprvpnRegionChoices(servers) regionChoices = validation.ExtractRegions(servers)
case providers.Wevpn: case providers.Wevpn:
servers := allServers.GetWevpn() servers := allServers.GetWevpn()
cityChoices = validation.WevpnCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.WevpnHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
case providers.Windscribe: case providers.Windscribe:
servers := allServers.GetWindscribe() servers := allServers.GetWindscribe()
regionChoices = validation.WindscribeRegionChoices(servers) regionChoices = validation.ExtractRegions(servers)
cityChoices = validation.WindscribeCityChoices(servers) cityChoices = validation.ExtractCities(servers)
hostnameChoices = validation.WindscribeHostnameChoices(servers) hostnameChoices = validation.ExtractHostnames(servers)
default: default:
return nil, nil, nil, nil, nil, nil, fmt.Errorf("%w: %s", ErrVPNProviderNameNotValid, vpnServiceProvider) return nil, nil, nil, nil, nil, nil, fmt.Errorf("%w: %s", ErrVPNProviderNameNotValid, vpnServiceProvider)
} }

View File

@@ -1,21 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func CyberghostCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func CyberghostHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,29 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func ExpressvpnCountriesChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func ExpressvpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func ExpressvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,21 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func FastestvpnCountriesChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func FastestvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,23 +0,0 @@
package validation
import "sort"
func makeUnique(choices []string) (uniqueChoices []string) {
seen := make(map[string]struct{}, len(choices))
uniqueChoices = make([]string, 0, len(uniqueChoices))
for _, choice := range choices {
if _, ok := seen[choice]; ok {
continue
}
seen[choice] = struct{}{}
uniqueChoices = append(uniqueChoices, choice)
}
sort.Slice(uniqueChoices, func(i, j int) bool {
return uniqueChoices[i] < uniqueChoices[j]
})
return uniqueChoices
}

View File

@@ -1,37 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func HideMyAssCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func HideMyAssRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return makeUnique(choices)
}
func HideMyAssCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func HideMyAssHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,29 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func IpvanishCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func IpvanishCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func IpvanishHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,37 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func IvpnCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func IvpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func IvpnISPChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].ISP
}
return makeUnique(choices)
}
func IvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,37 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func MullvadCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func MullvadCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func MullvadHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}
func MullvadISPChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].ISP
}
return makeUnique(choices)
}

View File

@@ -1,21 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func NordvpnRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return makeUnique(choices)
}
func NordvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,13 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func PerfectprivacyCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}

View File

@@ -1,29 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func PIAGeoChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return makeUnique(choices)
}
func PIAHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}
func PIANameChoices(servers []models.Server) (choices []string) { // TODO remove in v4
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].ServerName
}
return makeUnique(choices)
}

View File

@@ -1,35 +0,0 @@
package validation
import "github.com/qdm12/gluetun/internal/models"
func PrivadoCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func PrivadoRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return makeUnique(choices)
}
func PrivadoCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func PrivadoHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,27 +0,0 @@
package validation
import "github.com/qdm12/gluetun/internal/models"
func PrivatevpnCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func PrivatevpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func PrivatevpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,43 +0,0 @@
package validation
import "github.com/qdm12/gluetun/internal/models"
func ProtonvpnCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func ProtonvpnRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return makeUnique(choices)
}
func ProtonvpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func ProtonvpnNameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].ServerName
}
return makeUnique(choices)
}
func ProtonvpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,35 +0,0 @@
package validation
import "github.com/qdm12/gluetun/internal/models"
func PurevpnRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return makeUnique(choices)
}
func PurevpnCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func PurevpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func PurevpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -0,0 +1,111 @@
package validation
import (
"sort"
"github.com/qdm12/gluetun/internal/models"
)
func sortedInsert(ss []string, s string) []string {
i := sort.SearchStrings(ss, s)
ss = append(ss, "")
copy(ss[i+1:], ss[i:])
ss[i] = s
return ss
}
func ExtractCountries(servers []models.Server) (values []string) {
seen := make(map[string]struct{}, len(servers))
values = make([]string, 0, len(servers))
for _, server := range servers {
value := server.Country
_, alreadySeen := seen[value]
if alreadySeen {
continue
}
seen[value] = struct{}{}
values = sortedInsert(values, value)
}
return values
}
func ExtractRegions(servers []models.Server) (values []string) {
seen := make(map[string]struct{}, len(servers))
values = make([]string, 0, len(servers))
for _, server := range servers {
value := server.Region
_, alreadySeen := seen[value]
if alreadySeen {
continue
}
seen[value] = struct{}{}
values = sortedInsert(values, value)
}
return values
}
func ExtractCities(servers []models.Server) (values []string) {
seen := make(map[string]struct{}, len(servers))
values = make([]string, 0, len(servers))
for _, server := range servers {
value := server.City
_, alreadySeen := seen[value]
if alreadySeen {
continue
}
seen[value] = struct{}{}
values = sortedInsert(values, value)
}
return values
}
func ExtractISPs(servers []models.Server) (values []string) {
seen := make(map[string]struct{}, len(servers))
values = make([]string, 0, len(servers))
for _, server := range servers {
value := server.ISP
_, alreadySeen := seen[value]
if alreadySeen {
continue
}
seen[value] = struct{}{}
values = sortedInsert(values, value)
}
return values
}
func ExtractServerNames(servers []models.Server) (values []string) {
seen := make(map[string]struct{}, len(servers))
values = make([]string, 0, len(servers))
for _, server := range servers {
value := server.ServerName
_, alreadySeen := seen[value]
if alreadySeen {
continue
}
seen[value] = struct{}{}
values = sortedInsert(values, value)
}
return values
}
func ExtractHostnames(servers []models.Server) (values []string) {
seen := make(map[string]struct{}, len(servers))
values = make([]string, 0, len(servers))
for _, server := range servers {
value := server.Hostname
_, alreadySeen := seen[value]
if alreadySeen {
continue
}
seen[value] = struct{}{}
values = sortedInsert(values, value)
}
return values
}

View File

@@ -1,44 +1,9 @@
package validation package validation
import ( import (
"sort"
"github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/models"
) )
func SurfsharkRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return makeUnique(choices)
}
func SurfsharkCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func SurfsharkCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func SurfsharkHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}
// TODO remove in v4. // TODO remove in v4.
func SurfsharkRetroLocChoices() (choices []string) { func SurfsharkRetroLocChoices() (choices []string) {
locationData := constants.SurfsharkLocationData() locationData := constants.SurfsharkLocationData()
@@ -49,12 +14,8 @@ func SurfsharkRetroLocChoices() (choices []string) {
continue continue
} }
seen[data.RetroLoc] = struct{}{} seen[data.RetroLoc] = struct{}{}
choices = append(choices, data.RetroLoc) choices = sortedInsert(choices, data.RetroLoc)
} }
sort.Slice(choices, func(i, j int) bool {
return choices[i] < choices[j]
})
return choices return choices
} }

View File

@@ -1,29 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func TorguardCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func TorguardCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func TorguardHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,29 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func VPNUnlimitedCountryChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Country
}
return makeUnique(choices)
}
func VPNUnlimitedCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func VPNUnlimitedHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,13 +0,0 @@
package validation
import (
"github.com/qdm12/gluetun/internal/models"
)
func VyprvpnRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return makeUnique(choices)
}

View File

@@ -1,19 +0,0 @@
package validation
import "github.com/qdm12/gluetun/internal/models"
func WevpnCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func WevpnHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}

View File

@@ -1,27 +0,0 @@
package validation
import "github.com/qdm12/gluetun/internal/models"
func WindscribeRegionChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return makeUnique(choices)
}
func WindscribeCityChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].City
}
return makeUnique(choices)
}
func WindscribeHostnameChoices(servers []models.Server) (choices []string) {
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}