Files
gluetun/internal/models/selection.go

138 lines
3.6 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
2020-07-19 14:26:24 +00:00
Region string `json:"region"`
// Cyberghost
2020-07-19 14:26:24 +00:00
Group string `json:"group"`
2020-07-25 11:19:45 -04:00
// Mullvad, PureVPN
2020-07-19 14:26:24 +00:00
Country string `json:"country"`
City string `json:"city"`
2020-07-25 11:19:45 -04:00
// Mullvad
ISP string `json:"isp"`
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
2020-07-19 14:26:24 +00:00
Number uint16 `json:"number"`
// 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
}
// 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)
}
number := ""
if p.ServerSelection.Number > 0 {
number = fmt.Sprintf("%d", p.ServerSelection.Number)
}
switch strings.ToLower(string(p.Name)) {
case "private internet access old":
2020-07-05 20:05:15 +00:00
settingsList = append(settingsList,
"Region: "+p.ServerSelection.Region,
"Encryption preset: "+p.ExtraConfigOptions.EncryptionPreset,
"Port forwarding: "+p.PortForwarding.String(),
)
case "private internet access":
settingsList = append(settingsList,
"Region: "+p.ServerSelection.Region,
"Encryption preset: "+p.ExtraConfigOptions.EncryptionPreset,
)
case "mullvad":
2020-07-05 20:05:15 +00:00
settingsList = append(settingsList,
"Country: "+p.ServerSelection.Country,
"City: "+p.ServerSelection.City,
"ISP: "+p.ServerSelection.ISP,
2020-07-15 18:14:45 -04:00
"Custom port: "+customPort,
2020-07-05 20:05:15 +00:00
)
case "windscribe":
2020-07-05 20:05:15 +00:00
settingsList = append(settingsList,
"Region: "+p.ServerSelection.Region,
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,
"Region: "+p.ServerSelection.Region,
)
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,
"Region: "+p.ServerSelection.Region,
)
2020-07-13 08:04:35 -04:00
case "vyprvpn":
settingsList = append(settingsList,
"Region: "+p.ServerSelection.Region,
)
2020-07-15 18:14:45 -04:00
case "nordvpn":
settingsList = append(settingsList,
"Region: "+p.ServerSelection.Region,
"Number: "+number,
)
2020-07-25 11:19:45 -04:00
case "purevpn":
settingsList = append(settingsList,
"Region: "+p.ServerSelection.Region,
"Country: "+p.ServerSelection.Country,
"City: "+p.ServerSelection.City,
)
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 |--")
}