Files
gluetun/internal/models/selection.go

149 lines
4.1 KiB
Go
Raw Normal View History

package models
import (
"fmt"
"net"
"strings"
)
// ProviderSettings contains settings specific to a VPN provider
type ProviderSettings struct {
2020-07-19 14:26:24 +00:00
Name VPNProvider `json:"name"`
ServerSelection ServerSelection `json:"serverSelection"`
ExtraConfigOptions ExtraConfigOptions `json:"extraConfig"`
PortForwarding PortForwarding `json:"portForwarding"`
}
2020-07-15 18:14:45 -04:00
type ServerSelection struct { //nolint:maligned
// Common
2020-07-19 14:26:24 +00:00
Protocol NetworkProtocol `json:"networkProtocol"`
TargetIP net.IP `json:"targetIP,omitempty"`
2020-07-15 18:14:45 -04:00
// Cyberghost, PIA, Surfshark, Windscribe, Vyprvpn, NordVPN
Regions []string `json:"regions"`
// Cyberghost
2020-07-19 14:26:24 +00:00
Group string `json:"group"`
2020-07-25 11:19:45 -04:00
// Mullvad, PureVPN
Countries []string `json:"countries"`
Cities []string `json:"cities"`
2020-07-25 11:19:45 -04:00
// Mullvad
ISPs []string `json:"isps"`
Owned bool `json:"owned"`
// Mullvad, Windscribe
2020-07-19 14:26:24 +00:00
CustomPort uint16 `json:"customPort"`
2020-07-15 18:14:45 -04:00
// NordVPN
Numbers []uint16 `json:"numbers"`
2020-07-19 14:26:24 +00:00
// PIA
EncryptionPreset string `json:"encryptionPreset"`
}
type ExtraConfigOptions struct {
2020-07-19 14:26:24 +00:00
ClientKey string `json:"-"` // Cyberghost
EncryptionPreset string `json:"encryptionPreset"` // PIA
OpenVPNIPv6 bool `json:"openvpnIPv6"` // Mullvad
}
// PortForwarding contains settings for port forwarding
type PortForwarding struct {
2020-07-19 14:26:24 +00:00
Enabled bool `json:"enabled"`
Filepath Filepath `json:"filepath"`
}
func (p *PortForwarding) String() string {
if p.Enabled {
return fmt.Sprintf("on, saved in %s", p.Filepath)
}
return "off"
}
func (p *ProviderSettings) String() string {
settingsList := []string{
fmt.Sprintf("%s settings:", strings.Title(string(p.Name))),
"Network protocol: " + string(p.ServerSelection.Protocol),
}
2020-07-15 18:14:45 -04:00
customPort := ""
if p.ServerSelection.CustomPort > 0 {
customPort = fmt.Sprintf("%d", p.ServerSelection.CustomPort)
}
numbers := make([]string, len(p.ServerSelection.Numbers))
for i, number := range p.ServerSelection.Numbers {
numbers[i] = fmt.Sprintf("%d", number)
2020-07-15 18:14:45 -04:00
}
ipv6 := "off"
if p.ExtraConfigOptions.OpenVPNIPv6 {
ipv6 = "on"
}
switch strings.ToLower(string(p.Name)) {
case "private internet access old":
2020-07-05 20:05:15 +00:00
settingsList = append(settingsList,
"Regions: "+commaJoin(p.ServerSelection.Regions),
2020-07-05 20:05:15 +00:00
"Encryption preset: "+p.ExtraConfigOptions.EncryptionPreset,
"Port forwarding: "+p.PortForwarding.String(),
)
case "private internet access":
settingsList = append(settingsList,
"Regions: "+commaJoin(p.ServerSelection.Regions),
"Encryption preset: "+p.ExtraConfigOptions.EncryptionPreset,
"Port forwarding: "+p.PortForwarding.String(),
)
case "mullvad":
2020-07-05 20:05:15 +00:00
settingsList = append(settingsList,
"Countries: "+commaJoin(p.ServerSelection.Countries),
"Cities: "+commaJoin(p.ServerSelection.Cities),
"ISPs: "+commaJoin(p.ServerSelection.ISPs),
2020-07-15 18:14:45 -04:00
"Custom port: "+customPort,
"IPv6: "+ipv6,
2020-07-05 20:05:15 +00:00
)
case "windscribe":
2020-07-05 20:05:15 +00:00
settingsList = append(settingsList,
"Regions: "+commaJoin(p.ServerSelection.Regions),
2020-07-15 18:14:45 -04:00
"Custom port: "+customPort,
2020-07-05 20:05:15 +00:00
)
case "surfshark":
2020-07-05 20:05:15 +00:00
settingsList = append(settingsList,
"Regions: "+commaJoin(p.ServerSelection.Regions),
2020-07-05 20:05:15 +00:00
)
case "cyberghost":
2020-07-05 20:05:15 +00:00
settingsList = append(settingsList,
"ClientKey: [redacted]",
2020-07-05 20:05:15 +00:00
"Group: "+p.ServerSelection.Group,
"Regions: "+commaJoin(p.ServerSelection.Regions),
2020-07-05 20:05:15 +00:00
)
2020-07-13 08:04:35 -04:00
case "vyprvpn":
settingsList = append(settingsList,
"Regions: "+commaJoin(p.ServerSelection.Regions),
2020-07-13 08:04:35 -04:00
)
2020-07-15 18:14:45 -04:00
case "nordvpn":
settingsList = append(settingsList,
"Regions: "+commaJoin(p.ServerSelection.Regions),
"Numbers: "+commaJoin(numbers),
2020-07-15 18:14:45 -04:00
)
2020-07-25 11:19:45 -04:00
case "purevpn":
settingsList = append(settingsList,
"Regions: "+commaJoin(p.ServerSelection.Regions),
"Countries: "+commaJoin(p.ServerSelection.Countries),
"Cities: "+commaJoin(p.ServerSelection.Cities),
2020-07-25 11:19:45 -04:00
)
2020-07-15 18:14:45 -04:00
default:
settingsList = append(settingsList,
"<Missing String method, please implement me!>",
)
}
if p.ServerSelection.TargetIP != nil {
settingsList = append(settingsList,
"Target IP address: "+string(p.ServerSelection.TargetIP),
)
}
return strings.Join(settingsList, "\n |--")
}
func commaJoin(slice []string) string {
return strings.Join(slice, ", ")
}