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.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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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