2020-06-13 14:08:29 -04:00
|
|
|
package models
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"net"
|
|
|
|
|
"strings"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// ProviderSettings contains settings specific to a VPN provider
|
|
|
|
|
type ProviderSettings struct {
|
|
|
|
|
Name VPNProvider
|
|
|
|
|
ServerSelection ServerSelection
|
|
|
|
|
ExtraConfigOptions ExtraConfigOptions
|
|
|
|
|
PortForwarding PortForwarding
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-15 18:14:45 -04:00
|
|
|
type ServerSelection struct { //nolint:maligned
|
2020-06-13 14:08:29 -04:00
|
|
|
// Common
|
|
|
|
|
Protocol NetworkProtocol
|
|
|
|
|
TargetIP net.IP
|
|
|
|
|
|
2020-07-15 18:14:45 -04:00
|
|
|
// Cyberghost, PIA, Surfshark, Windscribe, Vyprvpn, NordVPN
|
2020-06-13 14:08:29 -04:00
|
|
|
Region string
|
|
|
|
|
|
|
|
|
|
// Cyberghost
|
|
|
|
|
Group string
|
|
|
|
|
|
|
|
|
|
// Mullvad
|
|
|
|
|
Country string
|
|
|
|
|
City string
|
|
|
|
|
ISP string
|
|
|
|
|
Owned bool
|
|
|
|
|
|
|
|
|
|
// Mullvad, Windscribe
|
|
|
|
|
CustomPort uint16
|
|
|
|
|
|
|
|
|
|
// PIA
|
|
|
|
|
EncryptionPreset string
|
2020-07-15 18:14:45 -04:00
|
|
|
|
|
|
|
|
// NordVPN
|
|
|
|
|
Number uint16
|
2020-06-13 14:08:29 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ExtraConfigOptions struct {
|
|
|
|
|
ClientKey string // Cyberghost
|
|
|
|
|
EncryptionPreset string // PIA
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// PortForwarding contains settings for port forwarding
|
|
|
|
|
type PortForwarding struct {
|
|
|
|
|
Enabled bool
|
|
|
|
|
Filepath 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)
|
|
|
|
|
}
|
2020-06-13 14:08:29 -04:00
|
|
|
switch strings.ToLower(string(p.Name)) {
|
|
|
|
|
case "private internet access":
|
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(),
|
|
|
|
|
)
|
2020-06-13 14:08:29 -04:00
|
|
|
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
|
|
|
)
|
2020-06-13 14:08:29 -04: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
|
|
|
)
|
2020-06-13 14:08:29 -04:00
|
|
|
case "surfshark":
|
2020-07-05 20:05:15 +00:00
|
|
|
settingsList = append(settingsList,
|
|
|
|
|
"Region: "+p.ServerSelection.Region,
|
|
|
|
|
)
|
2020-06-13 14:08:29 -04:00
|
|
|
case "cyberghost":
|
2020-07-05 20:05:15 +00:00
|
|
|
settingsList = append(settingsList,
|
2020-06-13 14:08:29 -04:00
|
|
|
"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,
|
|
|
|
|
)
|
|
|
|
|
default:
|
|
|
|
|
settingsList = append(settingsList,
|
|
|
|
|
"<Missing String method, please implement me!>",
|
|
|
|
|
)
|
2020-06-13 14:08:29 -04:00
|
|
|
}
|
|
|
|
|
if p.ServerSelection.TargetIP != nil {
|
|
|
|
|
settingsList = append(settingsList,
|
|
|
|
|
"Target IP address: "+string(p.ServerSelection.TargetIP),
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
return strings.Join(settingsList, "\n |--")
|
|
|
|
|
}
|