chore(models): common Server & Servers for all providers (#943)
This commit is contained in:
@@ -3,6 +3,8 @@ package models
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/constants/providers"
|
||||
)
|
||||
|
||||
func boolToMarkdown(b bool) string {
|
||||
@@ -14,280 +16,126 @@ func boolToMarkdown(b bool) string {
|
||||
|
||||
func markdownTableHeading(legendFields ...string) (markdown string) {
|
||||
return "| " + strings.Join(legendFields, " | ") + " |\n" +
|
||||
"|" + strings.Repeat(" --- |", len(legendFields)) + "\n"
|
||||
"|" + strings.Repeat(" --- |", len(legendFields))
|
||||
}
|
||||
|
||||
func (s *CyberghostServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
const (
|
||||
vpnHeader = "VPN"
|
||||
countryHeader = "Country"
|
||||
regionHeader = "Region"
|
||||
cityHeader = "City"
|
||||
ispHeader = "ISP"
|
||||
ownedHeader = "Owned"
|
||||
numberHeader = "Number"
|
||||
hostnameHeader = "Hostname"
|
||||
tcpHeader = "TCP"
|
||||
udpHeader = "UDP"
|
||||
multiHopHeader = "MultiHop"
|
||||
freeHeader = "Free"
|
||||
streamHeader = "Stream"
|
||||
portForwardHeader = "Port forwarding"
|
||||
)
|
||||
|
||||
func (s *Server) ToMarkdown(headers ...string) (markdown string) {
|
||||
if len(headers) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
fields := make([]string, len(headers))
|
||||
for i, header := range headers {
|
||||
switch header {
|
||||
case vpnHeader:
|
||||
fields[i] = s.VPN
|
||||
case countryHeader:
|
||||
fields[i] = s.Country
|
||||
case regionHeader:
|
||||
fields[i] = s.Region
|
||||
case cityHeader:
|
||||
fields[i] = s.City
|
||||
case ispHeader:
|
||||
fields[i] = s.ISP
|
||||
case ownedHeader:
|
||||
fields[i] = boolToMarkdown(s.Owned)
|
||||
case numberHeader:
|
||||
fields[i] = fmt.Sprint(s.Number)
|
||||
case hostnameHeader:
|
||||
fields[i] = fmt.Sprintf("`%s`", s.Hostname)
|
||||
case tcpHeader:
|
||||
fields[i] = boolToMarkdown(s.TCP)
|
||||
case udpHeader:
|
||||
fields[i] = boolToMarkdown(s.UDP)
|
||||
case multiHopHeader:
|
||||
fields[i] = boolToMarkdown(s.MultiHop)
|
||||
case freeHeader:
|
||||
fields[i] = boolToMarkdown(s.Free)
|
||||
case streamHeader:
|
||||
fields[i] = boolToMarkdown(s.Stream)
|
||||
case portForwardHeader:
|
||||
fields[i] = boolToMarkdown(s.PortForward)
|
||||
}
|
||||
}
|
||||
|
||||
return "| " + strings.Join(fields, " | ") + " |"
|
||||
}
|
||||
|
||||
func (s *Servers) ToMarkdown(vpnProvider string) (markdown string) {
|
||||
headers := getMarkdownHeaders(vpnProvider)
|
||||
|
||||
legend := markdownTableHeading(headers...)
|
||||
|
||||
entries := make([]string, len(s.Servers))
|
||||
for i, server := range s.Servers {
|
||||
entries[i] = server.ToMarkdown(headers...)
|
||||
}
|
||||
|
||||
markdown = legend + "\n" +
|
||||
strings.Join(entries, "\n") + "\n"
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s CyberghostServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | `%s` | %s | %s |", s.Country, s.Hostname,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *ExpressvpnServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "City", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
func getMarkdownHeaders(vpnProvider string) (headers []string) {
|
||||
switch vpnProvider {
|
||||
case providers.Cyberghost:
|
||||
return []string{countryHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
case providers.Expressvpn:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
case providers.Fastestvpn:
|
||||
return []string{countryHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
case providers.HideMyAss:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
case providers.Ipvanish:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
case providers.Ivpn:
|
||||
return []string{countryHeader, cityHeader, ispHeader, hostnameHeader, vpnHeader, tcpHeader, udpHeader}
|
||||
case providers.Mullvad:
|
||||
return []string{countryHeader, cityHeader, ispHeader, ownedHeader, hostnameHeader, vpnHeader}
|
||||
case providers.Nordvpn:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader}
|
||||
case providers.Perfectprivacy:
|
||||
return []string{cityHeader, tcpHeader, udpHeader}
|
||||
case providers.Privado:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader}
|
||||
case providers.PrivateInternetAccess:
|
||||
return []string{regionHeader, hostnameHeader, tcpHeader, udpHeader, portForwardHeader}
|
||||
case providers.Privatevpn:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader}
|
||||
case providers.Protonvpn:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, freeHeader}
|
||||
case providers.Purevpn:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
case providers.Surfshark:
|
||||
return []string{regionHeader, countryHeader, cityHeader, hostnameHeader, multiHopHeader, tcpHeader, udpHeader}
|
||||
case providers.Torguard:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
case providers.VPNUnlimited:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, freeHeader, streamHeader, tcpHeader, udpHeader}
|
||||
case providers.Vyprvpn:
|
||||
return []string{regionHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
case providers.Wevpn:
|
||||
return []string{cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
case providers.Windscribe:
|
||||
return []string{regionHeader, cityHeader, hostnameHeader, vpnHeader}
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *ExpressvpnServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | `%s` | %s | %s |",
|
||||
s.Country, s.City, s.Hostname,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *FastestvpnServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *FastestvpnServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | `%s` | %s | %s |",
|
||||
s.Country, s.Hostname, boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *HideMyAssServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "Region", "City", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *HideMyAssServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | %s | `%s` | %s | %s |",
|
||||
s.Country, s.Region, s.City, s.Hostname,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *IpvanishServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "City", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *IpvanishServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | `%s` | %s | %s |",
|
||||
s.Country, s.City, s.Hostname,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *IvpnServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "City", "ISP", "Hostname", "VPN", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *IvpnServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | %s | `%s` | %s | %s | %s |",
|
||||
s.Country, s.City, s.ISP, s.Hostname, s.VPN,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *MullvadServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "City", "ISP", "Owned",
|
||||
"Hostname", "VPN")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *MullvadServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | %s | %s | `%s` | %s |",
|
||||
s.Country, s.City, s.ISP, boolToMarkdown(s.Owned),
|
||||
s.Hostname, s.VPN)
|
||||
}
|
||||
|
||||
func (s *NordvpnServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Region", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *NordvpnServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | `%s` | %s | %s |",
|
||||
s.Region, s.Hostname,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *PrivadoServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "Region", "City", "Hostname")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *PrivadoServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | %s | `%s` |",
|
||||
s.Country, s.Region, s.City, s.Hostname)
|
||||
}
|
||||
|
||||
func (s *PerfectprivacyServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("City", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *PerfectprivacyServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | %s |",
|
||||
s.City, boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *PiaServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Region", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *PIAServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | `%s` | %s | %s |",
|
||||
s.Region, s.Hostname,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *PrivatevpnServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "City", "Hostname")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *PrivatevpnServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | `%s` |",
|
||||
s.Country, s.City, s.Hostname)
|
||||
}
|
||||
|
||||
func (s *ProtonvpnServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "Region", "City", "Hostname", "Free tier")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *ProtonvpnServer) ToMarkdown() (markdown string) {
|
||||
isFree := strings.Contains(strings.ToLower(s.Name), "free")
|
||||
return fmt.Sprintf("| %s | %s | %s | `%s` | %s |",
|
||||
s.Country, s.Region, s.City, s.Hostname, boolToMarkdown(isFree))
|
||||
}
|
||||
|
||||
func (s *PurevpnServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "Region", "City", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *PurevpnServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | %s | `%s` | %s | %s |",
|
||||
s.Country, s.Region, s.City, s.Hostname,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *SurfsharkServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Region", "Country", "City", "Hostname", "Multi-hop", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *SurfsharkServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | %s | `%s` | %s | %s | %s |",
|
||||
s.Region, s.Country, s.City, s.Hostname, boolToMarkdown(s.MultiHop),
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *TorguardServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "City", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *TorguardServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | `%s` | %s | %s |",
|
||||
s.Country, s.City, s.Hostname,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *VPNUnlimitedServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Country", "City", "Hostname", "Free tier", "Streaming", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *VPNUnlimitedServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | `%s` | %s | %s | %s | %s |",
|
||||
s.Country, s.City, s.Hostname,
|
||||
boolToMarkdown(s.Free), boolToMarkdown(s.Stream),
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *VyprvpnServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Region", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *VyprvpnServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | `%s` | %s | %s |",
|
||||
s.Region, s.Hostname,
|
||||
boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *WevpnServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("City", "Hostname", "TCP", "UDP")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *WevpnServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | `%s` | %s | %s |",
|
||||
s.City, s.Hostname, boolToMarkdown(s.TCP), boolToMarkdown(s.UDP))
|
||||
}
|
||||
|
||||
func (s *WindscribeServers) ToMarkdown() (markdown string) {
|
||||
markdown = markdownTableHeading("Region", "City", "Hostname", "VPN")
|
||||
for _, server := range s.Servers {
|
||||
markdown += server.ToMarkdown() + "\n"
|
||||
}
|
||||
return markdown
|
||||
}
|
||||
|
||||
func (s *WindscribeServer) ToMarkdown() (markdown string) {
|
||||
return fmt.Sprintf("| %s | %s | `%s` | %s |",
|
||||
s.Region, s.City, s.Hostname, s.VPN)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user