2020-06-13 14:08:29 -04:00
|
|
|
package settings
|
|
|
|
|
|
|
|
|
|
import (
|
2020-08-24 01:53:24 +00:00
|
|
|
"fmt"
|
|
|
|
|
|
2020-07-26 12:07:06 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/constants"
|
|
|
|
|
"github.com/qdm12/gluetun/internal/models"
|
|
|
|
|
"github.com/qdm12/gluetun/internal/params"
|
2020-06-13 14:08:29 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// GetPIASettings obtains PIA settings from environment variables using the params package.
|
|
|
|
|
func GetPIASettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
|
2020-11-05 02:10:34 +00:00
|
|
|
settings.Name = constants.PrivateInternetAccess
|
2020-08-28 08:17:04 -04:00
|
|
|
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
encryptionPreset, err := paramsReader.GetPIAEncryptionPreset()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.EncryptionPreset = encryptionPreset
|
|
|
|
|
settings.ExtraConfigOptions.EncryptionPreset = encryptionPreset
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Regions, err = paramsReader.GetPIARegions()
|
2020-08-28 08:17:04 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-06-13 14:08:29 -04:00
|
|
|
settings.PortForwarding.Enabled, err = paramsReader.GetPortForwarding()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
if settings.PortForwarding.Enabled {
|
|
|
|
|
settings.PortForwarding.Filepath, err = paramsReader.GetPortForwardingStatusFilepath()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return settings, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetMullvadSettings obtains Mullvad settings from environment variables using the params package.
|
|
|
|
|
func GetMullvadSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
|
|
|
|
|
settings.Name = constants.Mullvad
|
|
|
|
|
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Countries, err = paramsReader.GetMullvadCountries()
|
2020-06-13 14:08:29 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Cities, err = paramsReader.GetMullvadCities()
|
2020-06-13 14:08:29 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.ISPs, err = paramsReader.GetMullvadISPs()
|
2020-06-13 14:08:29 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.CustomPort, err = paramsReader.GetMullvadPort()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-08-24 01:53:24 +00:00
|
|
|
if settings.ServerSelection.Protocol == constants.TCP {
|
|
|
|
|
switch settings.ServerSelection.CustomPort {
|
2020-10-20 02:45:28 +00:00
|
|
|
case 0, 80, 443, 1401: //nolint:gomnd
|
2020-08-24 01:53:24 +00:00
|
|
|
default:
|
|
|
|
|
return settings, fmt.Errorf("port %d is not valid for TCP protocol", settings.ServerSelection.CustomPort)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
switch settings.ServerSelection.CustomPort {
|
2020-10-20 02:45:28 +00:00
|
|
|
case 0, 53, 1194, 1195, 1196, 1197, 1300, 1301, 1302, 1303, 1400: //nolint:gomnd
|
2020-08-24 01:53:24 +00:00
|
|
|
default:
|
|
|
|
|
return settings, fmt.Errorf("port %d is not valid for UDP protocol", settings.ServerSelection.CustomPort)
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Owned, err = paramsReader.GetMullvadOwned()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-09-26 09:33:24 -04:00
|
|
|
settings.ExtraConfigOptions.OpenVPNIPv6, err = paramsReader.GetOpenVPNIPv6()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-06-13 14:08:29 -04:00
|
|
|
return settings, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetWindscribeSettings obtains Windscribe settings from environment variables using the params package.
|
|
|
|
|
func GetWindscribeSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
|
|
|
|
|
settings.Name = constants.Windscribe
|
|
|
|
|
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Regions, err = paramsReader.GetWindscribeRegions()
|
2020-06-13 14:08:29 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-11-04 20:38:35 -05:00
|
|
|
settings.ServerSelection.Cities, err = paramsReader.GetWindscribeCities()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.Hostnames, err = paramsReader.GetWindscribeHostnames()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-06-13 14:08:29 -04:00
|
|
|
settings.ServerSelection.CustomPort, err = paramsReader.GetWindscribePort(settings.ServerSelection.Protocol)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
return settings, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetSurfsharkSettings obtains Surfshark settings from environment variables using the params package.
|
|
|
|
|
func GetSurfsharkSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
|
|
|
|
|
settings.Name = constants.Surfshark
|
|
|
|
|
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Regions, err = paramsReader.GetSurfsharkRegions()
|
2020-06-13 14:08:29 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
return settings, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetCyberghostSettings obtains Cyberghost settings from environment variables using the params package.
|
|
|
|
|
func GetCyberghostSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
|
|
|
|
|
settings.Name = constants.Cyberghost
|
|
|
|
|
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ExtraConfigOptions.ClientKey, err = paramsReader.GetCyberghostClientKey()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.Group, err = paramsReader.GetCyberghostGroup()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Regions, err = paramsReader.GetCyberghostRegions()
|
2020-06-13 14:08:29 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
return settings, nil
|
|
|
|
|
}
|
2020-07-13 08:04:35 -04:00
|
|
|
|
|
|
|
|
// GetVyprvpnSettings obtains Vyprvpn settings from environment variables using the params package.
|
|
|
|
|
func GetVyprvpnSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
|
|
|
|
|
settings.Name = constants.Vyprvpn
|
|
|
|
|
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Regions, err = paramsReader.GetVyprvpnRegions()
|
2020-07-13 08:04:35 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
return settings, nil
|
|
|
|
|
}
|
2020-07-15 18:14:45 -04:00
|
|
|
|
|
|
|
|
// GetNordvpnSettings obtains NordVPN settings from environment variables using the params package.
|
|
|
|
|
func GetNordvpnSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
|
|
|
|
|
settings.Name = constants.Nordvpn
|
|
|
|
|
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Regions, err = paramsReader.GetNordvpnRegions()
|
2020-07-15 18:14:45 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Numbers, err = paramsReader.GetNordvpnNumbers()
|
2020-07-15 18:14:45 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
return settings, nil
|
|
|
|
|
}
|
2020-07-25 11:19:45 -04:00
|
|
|
|
|
|
|
|
// GetPurevpnSettings obtains Purevpn settings from environment variables using the params package.
|
|
|
|
|
func GetPurevpnSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
|
|
|
|
|
settings.Name = constants.Mullvad
|
|
|
|
|
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Regions, err = paramsReader.GetPurevpnRegions()
|
2020-07-25 11:19:45 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Countries, err = paramsReader.GetPurevpnCountries()
|
2020-07-25 11:19:45 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
2020-10-18 17:15:42 -04:00
|
|
|
settings.ServerSelection.Cities, err = paramsReader.GetPurevpnCities()
|
2020-07-25 11:19:45 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
return settings, nil
|
|
|
|
|
}
|
2020-11-08 20:56:49 -05:00
|
|
|
|
|
|
|
|
// GetPrivadoSettings obtains Privado settings from environment variables using the params package.
|
|
|
|
|
func GetPrivadoSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
|
|
|
|
|
settings.Name = constants.Privado
|
|
|
|
|
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.Cities, err = paramsReader.GetPrivadoCities()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
settings.ServerSelection.Numbers, err = paramsReader.GetPrivadoNumbers()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return settings, err
|
|
|
|
|
}
|
|
|
|
|
return settings, nil
|
|
|
|
|
}
|