mirror of
https://github.com/qdm12/gluetun.git
synced 2026-06-16 16:34:09 +02:00
chore(all): provider to servers map in allServers
- Simplify formatting CLI - Simplify updater code - Simplify filter choices for config validation - Simplify all servers deep copying - Custom JSON marshaling methods for `AllServers` - Simplify provider constructor switch - Simplify storage merging - Simplify storage reading and extraction - Simplify updating code
This commit is contained in:
@@ -27,7 +27,7 @@ func (p *Provider) validate(vpnType string, allServers models.AllServers) (err e
|
||||
// Validate Name
|
||||
var validNames []string
|
||||
if vpnType == vpn.OpenVPN {
|
||||
validNames = providers.All()
|
||||
validNames = providers.AllWithCustom()
|
||||
validNames = append(validNames, "pia") // Retro-compatibility
|
||||
} else { // Wireguard
|
||||
validNames = []string{
|
||||
|
||||
@@ -140,118 +140,26 @@ func getLocationFilterChoices(vpnServiceProvider string, ss *ServerSelection,
|
||||
countryChoices, regionChoices, cityChoices,
|
||||
ispChoices, nameChoices, hostnameChoices []string,
|
||||
err error) {
|
||||
switch vpnServiceProvider {
|
||||
case providers.Custom:
|
||||
case providers.Cyberghost:
|
||||
servers := allServers.GetCyberghost()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Expressvpn:
|
||||
servers := allServers.GetExpressvpn()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Fastestvpn:
|
||||
servers := allServers.GetFastestvpn()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.HideMyAss:
|
||||
servers := allServers.GetHideMyAss()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Ipvanish:
|
||||
servers := allServers.GetIpvanish()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Ivpn:
|
||||
servers := allServers.GetIvpn()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
ispChoices = validation.ExtractISPs(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Mullvad:
|
||||
servers := allServers.GetMullvad()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
ispChoices = validation.ExtractISPs(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Nordvpn:
|
||||
servers := allServers.GetNordvpn()
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Perfectprivacy:
|
||||
servers := allServers.GetPerfectprivacy()
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
case providers.Privado:
|
||||
servers := allServers.GetPrivado()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.PrivateInternetAccess:
|
||||
servers := allServers.GetPia()
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
nameChoices = validation.ExtractServerNames(servers)
|
||||
case providers.Privatevpn:
|
||||
servers := allServers.GetPrivatevpn()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Protonvpn:
|
||||
servers := allServers.GetProtonvpn()
|
||||
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.ExtractCountries(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Surfshark:
|
||||
servers := allServers.GetSurfshark()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
providerServers, ok := allServers.ProviderToServers[vpnServiceProvider]
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("VPN service provider unknown: %s", vpnServiceProvider))
|
||||
}
|
||||
servers := providerServers.Servers
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
ispChoices = validation.ExtractISPs(servers)
|
||||
nameChoices = validation.ExtractServerNames(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
|
||||
if vpnServiceProvider == providers.Surfshark {
|
||||
// // Retro compatibility
|
||||
// TODO v4 remove
|
||||
regionChoices = append(regionChoices, validation.SurfsharkRetroLocChoices()...)
|
||||
if err := helpers.AreAllOneOf(ss.Regions, regionChoices); err != nil {
|
||||
return nil, nil, nil, nil, nil, nil, fmt.Errorf("%w: %s", ErrRegionNotValid, err)
|
||||
}
|
||||
// Retro compatibility
|
||||
// TODO remove in v4
|
||||
*ss = surfsharkRetroRegion(*ss)
|
||||
case providers.Torguard:
|
||||
servers := allServers.GetTorguard()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.VPNUnlimited:
|
||||
servers := allServers.GetVPNUnlimited()
|
||||
countryChoices = validation.ExtractCountries(servers)
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Vyprvpn:
|
||||
servers := allServers.GetVyprvpn()
|
||||
regionChoices = validation.ExtractRegions(servers)
|
||||
case providers.Wevpn:
|
||||
servers := allServers.GetWevpn()
|
||||
cityChoices = validation.ExtractCities(servers)
|
||||
hostnameChoices = validation.ExtractHostnames(servers)
|
||||
case providers.Windscribe:
|
||||
servers := allServers.GetWindscribe()
|
||||
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)
|
||||
}
|
||||
|
||||
return countryChoices, regionChoices, cityChoices,
|
||||
|
||||
@@ -43,10 +43,6 @@ func (u Updater) Validate() (err error) {
|
||||
for i, provider := range u.Providers {
|
||||
valid := false
|
||||
for _, validProvider := range providers.All() {
|
||||
if validProvider == providers.Custom {
|
||||
continue
|
||||
}
|
||||
|
||||
if provider == validProvider {
|
||||
valid = true
|
||||
break
|
||||
|
||||
@@ -19,6 +19,9 @@ func ExtractCountries(servers []models.Server) (values []string) {
|
||||
values = make([]string, 0, len(servers))
|
||||
for _, server := range servers {
|
||||
value := server.Country
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
_, alreadySeen := seen[value]
|
||||
if alreadySeen {
|
||||
continue
|
||||
@@ -35,6 +38,9 @@ func ExtractRegions(servers []models.Server) (values []string) {
|
||||
values = make([]string, 0, len(servers))
|
||||
for _, server := range servers {
|
||||
value := server.Region
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
_, alreadySeen := seen[value]
|
||||
if alreadySeen {
|
||||
continue
|
||||
@@ -51,6 +57,9 @@ func ExtractCities(servers []models.Server) (values []string) {
|
||||
values = make([]string, 0, len(servers))
|
||||
for _, server := range servers {
|
||||
value := server.City
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
_, alreadySeen := seen[value]
|
||||
if alreadySeen {
|
||||
continue
|
||||
@@ -67,6 +76,9 @@ func ExtractISPs(servers []models.Server) (values []string) {
|
||||
values = make([]string, 0, len(servers))
|
||||
for _, server := range servers {
|
||||
value := server.ISP
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
_, alreadySeen := seen[value]
|
||||
if alreadySeen {
|
||||
continue
|
||||
@@ -83,6 +95,9 @@ func ExtractServerNames(servers []models.Server) (values []string) {
|
||||
values = make([]string, 0, len(servers))
|
||||
for _, server := range servers {
|
||||
value := server.ServerName
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
_, alreadySeen := seen[value]
|
||||
if alreadySeen {
|
||||
continue
|
||||
@@ -99,6 +114,9 @@ func ExtractHostnames(servers []models.Server) (values []string) {
|
||||
values = make([]string, 0, len(servers))
|
||||
for _, server := range servers {
|
||||
value := server.Hostname
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
_, alreadySeen := seen[value]
|
||||
if alreadySeen {
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user