chore(validation): uniformize server filters build
This commit is contained in:
@@ -144,82 +144,82 @@ func getLocationFilterChoices(vpnServiceProvider string, ss *ServerSelection,
|
||||
case providers.Custom:
|
||||
case providers.Cyberghost:
|
||||
servers := allServers.GetCyberghost()
|
||||
countryChoices = validation.CyberghostCountryChoices(servers)
|
||||
hostnameChoices = validation.CyberghostHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Expressvpn:
|
||||
servers := allServers.GetExpressvpn()
|
||||
countryChoices = validation.ExpressvpnCountriesChoices(servers)
|
||||
cityChoices = validation.ExpressvpnCityChoices(servers)
|
||||
hostnameChoices = validation.ExpressvpnHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Fastestvpn:
|
||||
servers := allServers.GetFastestvpn()
|
||||
countryChoices = validation.FastestvpnCountriesChoices(servers)
|
||||
hostnameChoices = validation.FastestvpnHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.HideMyAss:
|
||||
servers := allServers.GetHideMyAss()
|
||||
countryChoices = validation.HideMyAssCountryChoices(servers)
|
||||
regionChoices = validation.HideMyAssRegionChoices(servers)
|
||||
cityChoices = validation.HideMyAssCityChoices(servers)
|
||||
hostnameChoices = validation.HideMyAssHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Ipvanish:
|
||||
servers := allServers.GetIpvanish()
|
||||
countryChoices = validation.IpvanishCountryChoices(servers)
|
||||
cityChoices = validation.IpvanishCityChoices(servers)
|
||||
hostnameChoices = validation.IpvanishHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Ivpn:
|
||||
servers := allServers.GetIvpn()
|
||||
countryChoices = validation.IvpnCountryChoices(servers)
|
||||
cityChoices = validation.IvpnCityChoices(servers)
|
||||
ispChoices = validation.IvpnISPChoices(servers)
|
||||
hostnameChoices = validation.IvpnHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
ispChoices = validation.ExtractISPs(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Mullvad:
|
||||
servers := allServers.GetMullvad()
|
||||
countryChoices = validation.MullvadCountryChoices(servers)
|
||||
cityChoices = validation.MullvadCityChoices(servers)
|
||||
ispChoices = validation.MullvadISPChoices(servers)
|
||||
hostnameChoices = validation.MullvadHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
ispChoices = validation.ExtractISPs(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Nordvpn:
|
||||
servers := allServers.GetNordvpn()
|
||||
regionChoices = validation.NordvpnRegionChoices(servers)
|
||||
hostnameChoices = validation.NordvpnHostnameChoices(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Perfectprivacy:
|
||||
servers := allServers.GetPerfectprivacy()
|
||||
cityChoices = validation.PerfectprivacyCityChoices(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
case providers.Privado:
|
||||
servers := allServers.GetPrivado()
|
||||
countryChoices = validation.PrivadoCountryChoices(servers)
|
||||
regionChoices = validation.PrivadoRegionChoices(servers)
|
||||
cityChoices = validation.PrivadoCityChoices(servers)
|
||||
hostnameChoices = validation.PrivadoHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.PrivateInternetAccess:
|
||||
servers := allServers.GetPia()
|
||||
regionChoices = validation.PIAGeoChoices(servers)
|
||||
hostnameChoices = validation.PIAHostnameChoices(servers)
|
||||
nameChoices = validation.PIANameChoices(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
nameChoices = validation.ExtractServerNames(servers)
|
||||
case providers.Privatevpn:
|
||||
servers := allServers.GetPrivatevpn()
|
||||
countryChoices = validation.PrivatevpnCountryChoices(servers)
|
||||
cityChoices = validation.PrivatevpnCityChoices(servers)
|
||||
hostnameChoices = validation.PrivatevpnHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Protonvpn:
|
||||
servers := allServers.GetProtonvpn()
|
||||
countryChoices = validation.ProtonvpnCountryChoices(servers)
|
||||
regionChoices = validation.ProtonvpnRegionChoices(servers)
|
||||
cityChoices = validation.ProtonvpnCityChoices(servers)
|
||||
nameChoices = validation.ProtonvpnNameChoices(servers)
|
||||
hostnameChoices = validation.ProtonvpnHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
nameChoices = validation.ExtractServerNames(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Purevpn:
|
||||
servers := allServers.GetPurevpn()
|
||||
countryChoices = validation.PurevpnCountryChoices(servers)
|
||||
regionChoices = validation.PurevpnRegionChoices(servers)
|
||||
cityChoices = validation.PurevpnCityChoices(servers)
|
||||
hostnameChoices = validation.PurevpnHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Surfshark:
|
||||
servers := allServers.GetSurfshark()
|
||||
countryChoices = validation.SurfsharkCountryChoices(servers)
|
||||
cityChoices = validation.SurfsharkCityChoices(servers)
|
||||
hostnameChoices = validation.SurfsharkHostnameChoices(servers)
|
||||
regionChoices = validation.SurfsharkRegionChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
// TODO v4 remove
|
||||
regionChoices = append(regionChoices, validation.SurfsharkRetroLocChoices()...)
|
||||
if err := helpers.AreAllOneOf(ss.Regions, regionChoices); err != nil {
|
||||
@@ -230,26 +230,26 @@ func getLocationFilterChoices(vpnServiceProvider string, ss *ServerSelection,
|
||||
*ss = surfsharkRetroRegion(*ss)
|
||||
case providers.Torguard:
|
||||
servers := allServers.GetTorguard()
|
||||
countryChoices = validation.TorguardCountryChoices(servers)
|
||||
cityChoices = validation.TorguardCityChoices(servers)
|
||||
hostnameChoices = validation.TorguardHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.VPNUnlimited:
|
||||
servers := allServers.GetVPNUnlimited()
|
||||
countryChoices = validation.VPNUnlimitedCountryChoices(servers)
|
||||
cityChoices = validation.VPNUnlimitedCityChoices(servers)
|
||||
hostnameChoices = validation.VPNUnlimitedHostnameChoices(servers)
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Vyprvpn:
|
||||
servers := allServers.GetVyprvpn()
|
||||
regionChoices = validation.VyprvpnRegionChoices(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
case providers.Wevpn:
|
||||
servers := allServers.GetWevpn()
|
||||
cityChoices = validation.WevpnCityChoices(servers)
|
||||
hostnameChoices = validation.WevpnHostnameChoices(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Windscribe:
|
||||
servers := allServers.GetWindscribe()
|
||||
regionChoices = validation.WindscribeRegionChoices(servers)
|
||||
cityChoices = validation.WindscribeCityChoices(servers)
|
||||
hostnameChoices = validation.WindscribeHostnameChoices(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
default:
|
||||
return nil, nil, nil, nil, nil, nil, fmt.Errorf("%w: %s", ErrVPNProviderNameNotValid, vpnServiceProvider)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
111
internal/configuration/settings/validation/servers.go
Normal file
111
internal/configuration/settings/validation/servers.go
Normal 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
|
||||
}
|
||||
@@ -1,44 +1,9 @@
|
||||
package validation
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
||||
"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.
|
||||
func SurfsharkRetroLocChoices() (choices []string) {
|
||||
locationData := constants.SurfsharkLocationData()
|
||||
@@ -49,12 +14,8 @@ func SurfsharkRetroLocChoices() (choices []string) {
|
||||
continue
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user