chore(cli): refactor FormatServers to use provider strings

This commit is contained in:
Quentin McGaw
2022-05-08 19:05:36 +00:00
parent 2eec60cdd2
commit 92dbe1ebad

View File

@@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/constants/providers"
@@ -21,34 +22,37 @@ var (
ErrProviderUnspecified = errors.New("VPN provider to format was not specified") ErrProviderUnspecified = errors.New("VPN provider to format was not specified")
) )
func addProviderFlag(flagSet *flag.FlagSet,
providerToFormat map[string]*bool, provider string) {
boolPtr, ok := providerToFormat[provider]
if !ok {
panic(fmt.Sprintf("unknown provider in format map: %s", provider))
}
flagSet.BoolVar(boolPtr, provider, false, "Format "+strings.Title(provider)+" servers")
}
func getFormatForProvider(providerToFormat map[string]*bool, provider string) (format bool) {
formatPtr, ok := providerToFormat[provider]
if !ok {
panic(fmt.Sprintf("unknown provider in format map: %s", provider))
}
return *formatPtr
}
func (c *CLI) FormatServers(args []string) error { func (c *CLI) FormatServers(args []string) error {
var format, output string var format, output string
var cyberghost, expressvpn, fastestvpn, hideMyAss, ipvanish, ivpn, mullvad, allProviders := providers.All()
nordvpn, perfectPrivacy, pia, privado, privatevpn, protonvpn, purevpn, surfshark, providersToFormat := make(map[string]*bool, len(allProviders))
torguard, vpnUnlimited, vyprvpn, wevpn, windscribe bool for _, provider := range allProviders {
value := false
providersToFormat[provider] = &value
}
flagSet := flag.NewFlagSet("markdown", flag.ExitOnError) flagSet := flag.NewFlagSet("markdown", flag.ExitOnError)
flagSet.StringVar(&format, "format", "markdown", "Format to use which can be: 'markdown'") flagSet.StringVar(&format, "format", "markdown", "Format to use which can be: 'markdown'")
flagSet.StringVar(&output, "output", "/dev/stdout", "Output file to write the formatted data to") flagSet.StringVar(&output, "output", "/dev/stdout", "Output file to write the formatted data to")
flagSet.BoolVar(&cyberghost, providers.Cyberghost, false, "Format Cyberghost servers") for _, provider := range allProviders {
flagSet.BoolVar(&expressvpn, providers.Expressvpn, false, "Format ExpressVPN servers") addProviderFlag(flagSet, providersToFormat, provider)
flagSet.BoolVar(&fastestvpn, providers.Fastestvpn, false, "Format FastestVPN servers") }
flagSet.BoolVar(&hideMyAss, providers.HideMyAss, false, "Format HideMyAss servers")
flagSet.BoolVar(&ipvanish, providers.Ipvanish, false, "Format IpVanish servers")
flagSet.BoolVar(&ivpn, providers.Ivpn, false, "Format IVPN servers")
flagSet.BoolVar(&mullvad, providers.Mullvad, false, "Format Mullvad servers")
flagSet.BoolVar(&nordvpn, providers.Nordvpn, false, "Format Nordvpn servers")
flagSet.BoolVar(&perfectPrivacy, providers.Perfectprivacy, false, "Format Perfect Privacy servers")
flagSet.BoolVar(&pia, providers.PrivateInternetAccess, false, "Format Private Internet Access servers")
flagSet.BoolVar(&privado, providers.Privado, false, "Format Privado servers")
flagSet.BoolVar(&privatevpn, providers.Privatevpn, false, "Format Private VPN servers")
flagSet.BoolVar(&protonvpn, providers.Protonvpn, false, "Format Protonvpn servers")
flagSet.BoolVar(&purevpn, providers.Purevpn, false, "Format Purevpn servers")
flagSet.BoolVar(&surfshark, providers.Surfshark, false, "Format Surfshark servers")
flagSet.BoolVar(&torguard, providers.Torguard, false, "Format Torguard servers")
flagSet.BoolVar(&vpnUnlimited, providers.VPNUnlimited, false, "Format VPN Unlimited servers")
flagSet.BoolVar(&vyprvpn, providers.Vyprvpn, false, "Format Vyprvpn servers")
flagSet.BoolVar(&wevpn, providers.Wevpn, false, "Format WeVPN servers")
flagSet.BoolVar(&windscribe, providers.Windscribe, false, "Format Windscribe servers")
if err := flagSet.Parse(args); err != nil { if err := flagSet.Parse(args); err != nil {
return err return err
} }
@@ -66,45 +70,45 @@ func (c *CLI) FormatServers(args []string) error {
var formatted string var formatted string
switch { switch {
case cyberghost: case getFormatForProvider(providersToFormat, providers.Cyberghost):
formatted = currentServers.Cyberghost.ToMarkdown(providers.Cyberghost) formatted = currentServers.Cyberghost.ToMarkdown(providers.Cyberghost)
case expressvpn: case getFormatForProvider(providersToFormat, providers.Expressvpn):
formatted = currentServers.Expressvpn.ToMarkdown(providers.Expressvpn) formatted = currentServers.Expressvpn.ToMarkdown(providers.Expressvpn)
case fastestvpn: case getFormatForProvider(providersToFormat, providers.Fastestvpn):
formatted = currentServers.Fastestvpn.ToMarkdown(providers.Fastestvpn) formatted = currentServers.Fastestvpn.ToMarkdown(providers.Fastestvpn)
case hideMyAss: case getFormatForProvider(providersToFormat, providers.HideMyAss):
formatted = currentServers.HideMyAss.ToMarkdown(providers.HideMyAss) formatted = currentServers.HideMyAss.ToMarkdown(providers.HideMyAss)
case ipvanish: case getFormatForProvider(providersToFormat, providers.Ipvanish):
formatted = currentServers.Ipvanish.ToMarkdown(providers.Ipvanish) formatted = currentServers.Ipvanish.ToMarkdown(providers.Ipvanish)
case ivpn: case getFormatForProvider(providersToFormat, providers.Ivpn):
formatted = currentServers.Ivpn.ToMarkdown(providers.Ivpn) formatted = currentServers.Ivpn.ToMarkdown(providers.Ivpn)
case mullvad: case getFormatForProvider(providersToFormat, providers.Mullvad):
formatted = currentServers.Mullvad.ToMarkdown(providers.Mullvad) formatted = currentServers.Mullvad.ToMarkdown(providers.Mullvad)
case nordvpn: case getFormatForProvider(providersToFormat, providers.Nordvpn):
formatted = currentServers.Nordvpn.ToMarkdown(providers.Nordvpn) formatted = currentServers.Nordvpn.ToMarkdown(providers.Nordvpn)
case perfectPrivacy: case getFormatForProvider(providersToFormat, providers.Perfectprivacy):
formatted = currentServers.Perfectprivacy.ToMarkdown(providers.Perfectprivacy) formatted = currentServers.Perfectprivacy.ToMarkdown(providers.Perfectprivacy)
case pia: case getFormatForProvider(providersToFormat, providers.PrivateInternetAccess):
formatted = currentServers.Pia.ToMarkdown(providers.PrivateInternetAccess) formatted = currentServers.Pia.ToMarkdown(providers.PrivateInternetAccess)
case privado: case getFormatForProvider(providersToFormat, providers.Privado):
formatted = currentServers.Privado.ToMarkdown(providers.Privado) formatted = currentServers.Privado.ToMarkdown(providers.Privado)
case privatevpn: case getFormatForProvider(providersToFormat, providers.Privatevpn):
formatted = currentServers.Privatevpn.ToMarkdown(providers.Privatevpn) formatted = currentServers.Privatevpn.ToMarkdown(providers.Privatevpn)
case protonvpn: case getFormatForProvider(providersToFormat, providers.Protonvpn):
formatted = currentServers.Protonvpn.ToMarkdown(providers.Protonvpn) formatted = currentServers.Protonvpn.ToMarkdown(providers.Protonvpn)
case purevpn: case getFormatForProvider(providersToFormat, providers.Purevpn):
formatted = currentServers.Purevpn.ToMarkdown(providers.Purevpn) formatted = currentServers.Purevpn.ToMarkdown(providers.Purevpn)
case surfshark: case getFormatForProvider(providersToFormat, providers.Surfshark):
formatted = currentServers.Surfshark.ToMarkdown(providers.Surfshark) formatted = currentServers.Surfshark.ToMarkdown(providers.Surfshark)
case torguard: case getFormatForProvider(providersToFormat, providers.Torguard):
formatted = currentServers.Torguard.ToMarkdown(providers.Torguard) formatted = currentServers.Torguard.ToMarkdown(providers.Torguard)
case vpnUnlimited: case getFormatForProvider(providersToFormat, providers.VPNUnlimited):
formatted = currentServers.VPNUnlimited.ToMarkdown(providers.VPNUnlimited) formatted = currentServers.VPNUnlimited.ToMarkdown(providers.VPNUnlimited)
case vyprvpn: case getFormatForProvider(providersToFormat, providers.Vyprvpn):
formatted = currentServers.Vyprvpn.ToMarkdown(providers.Vyprvpn) formatted = currentServers.Vyprvpn.ToMarkdown(providers.Vyprvpn)
case wevpn: case getFormatForProvider(providersToFormat, providers.Wevpn):
formatted = currentServers.Wevpn.ToMarkdown(providers.Wevpn) formatted = currentServers.Wevpn.ToMarkdown(providers.Wevpn)
case windscribe: case getFormatForProvider(providersToFormat, providers.Windscribe):
formatted = currentServers.Windscribe.ToMarkdown(providers.Windscribe) formatted = currentServers.Windscribe.ToMarkdown(providers.Windscribe)
default: default:
return ErrProviderUnspecified return ErrProviderUnspecified