2022-01-06 06:40:23 -05:00
|
|
|
package env
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
|
|
|
|
|
"github.com/qdm12/gluetun/internal/configuration/settings"
|
2022-04-16 19:30:26 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/constants/providers"
|
2023-06-05 16:25:52 +00:00
|
|
|
"github.com/qdm12/gosettings/sources/env"
|
2022-01-06 06:40:23 -05:00
|
|
|
)
|
|
|
|
|
|
2022-08-26 15:16:51 +00:00
|
|
|
func (s *Source) readServerSelection(vpnProvider, vpnType string) (
|
2022-01-06 06:40:23 -05:00
|
|
|
ss settings.ServerSelection, err error) {
|
|
|
|
|
ss.VPN = vpnType
|
|
|
|
|
|
2023-06-05 16:25:52 +00:00
|
|
|
ss.TargetIP, err = s.env.NetipAddr("VPN_ENDPOINT_IP",
|
|
|
|
|
env.RetroKeys("OPENVPN_TARGET_IP"))
|
2022-01-06 06:40:23 -05:00
|
|
|
if err != nil {
|
|
|
|
|
return ss, err
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-05 16:25:52 +00:00
|
|
|
ss.Countries = s.env.CSV("SERVER_COUNTRIES", env.RetroKeys("COUNTRY"))
|
2022-04-16 19:30:26 +00:00
|
|
|
if vpnProvider == providers.Cyberghost && len(ss.Countries) == 0 {
|
2022-02-05 23:04:28 +00:00
|
|
|
// Retro-compatibility for Cyberghost using the REGION variable
|
2023-06-01 08:22:55 +00:00
|
|
|
ss.Countries = s.env.CSV("REGION")
|
2022-02-05 23:04:28 +00:00
|
|
|
if len(ss.Countries) > 0 {
|
2023-06-05 16:25:52 +00:00
|
|
|
s.handleDeprecatedKey("REGION", "SERVER_COUNTRIES")
|
2022-01-29 14:21:41 +00:00
|
|
|
}
|
2022-01-06 06:40:23 -05:00
|
|
|
}
|
|
|
|
|
|
2023-06-05 16:25:52 +00:00
|
|
|
ss.Regions = s.env.CSV("SERVER_REGIONS", env.RetroKeys("REGION"))
|
|
|
|
|
ss.Cities = s.env.CSV("SERVER_CITIES", env.RetroKeys("CITY"))
|
2023-06-01 08:22:55 +00:00
|
|
|
ss.ISPs = s.env.CSV("ISP")
|
2023-06-05 16:25:52 +00:00
|
|
|
ss.Hostnames = s.env.CSV("SERVER_HOSTNAMES", env.RetroKeys("SERVER_HOSTNAME"))
|
|
|
|
|
ss.Names = s.env.CSV("SERVER_NAMES", env.RetroKeys("SERVER_NAME"))
|
|
|
|
|
ss.Numbers, err = s.env.CSVUint16("SERVER_NUMBER")
|
|
|
|
|
if err != nil {
|
|
|
|
|
return ss, err
|
2022-01-06 06:40:23 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Mullvad only
|
2023-06-05 16:25:52 +00:00
|
|
|
ss.OwnedOnly, err = s.env.BoolPtr("OWNED_ONLY", env.RetroKeys("OWNED"))
|
2022-01-06 06:40:23 -05:00
|
|
|
if err != nil {
|
2022-01-27 14:12:25 +00:00
|
|
|
return ss, err
|
2022-01-06 06:40:23 -05:00
|
|
|
}
|
|
|
|
|
|
2022-01-07 22:41:57 +00:00
|
|
|
// VPNUnlimited and ProtonVPN only
|
2023-06-01 08:22:55 +00:00
|
|
|
ss.FreeOnly, err = s.env.BoolPtr("FREE_ONLY")
|
2022-01-06 06:40:23 -05:00
|
|
|
if err != nil {
|
2023-05-30 15:21:09 +00:00
|
|
|
return ss, err
|
2022-01-06 06:40:23 -05:00
|
|
|
}
|
|
|
|
|
|
2022-08-15 19:54:58 -04:00
|
|
|
// VPNSecure only
|
2023-06-01 08:22:55 +00:00
|
|
|
ss.PremiumOnly, err = s.env.BoolPtr("PREMIUM_ONLY")
|
2022-08-15 19:54:58 -04:00
|
|
|
if err != nil {
|
2023-05-30 15:21:09 +00:00
|
|
|
return ss, err
|
2022-08-15 19:54:58 -04:00
|
|
|
}
|
|
|
|
|
|
2022-01-06 06:40:23 -05:00
|
|
|
// VPNUnlimited only
|
2023-06-01 08:22:55 +00:00
|
|
|
ss.MultiHopOnly, err = s.env.BoolPtr("MULTIHOP_ONLY")
|
2022-01-06 06:40:23 -05:00
|
|
|
if err != nil {
|
2023-05-30 15:21:09 +00:00
|
|
|
return ss, err
|
2022-01-06 06:40:23 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// VPNUnlimited only
|
2023-06-01 08:22:55 +00:00
|
|
|
ss.MultiHopOnly, err = s.env.BoolPtr("STREAM_ONLY")
|
2022-01-06 06:40:23 -05:00
|
|
|
if err != nil {
|
2023-05-30 15:21:09 +00:00
|
|
|
return ss, err
|
2022-01-06 06:40:23 -05:00
|
|
|
}
|
|
|
|
|
|
2022-08-26 15:16:51 +00:00
|
|
|
ss.OpenVPN, err = s.readOpenVPNSelection()
|
2022-01-06 06:40:23 -05:00
|
|
|
if err != nil {
|
|
|
|
|
return ss, err
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-26 15:16:51 +00:00
|
|
|
ss.Wireguard, err = s.readWireguardSelection()
|
2022-01-06 06:40:23 -05:00
|
|
|
if err != nil {
|
|
|
|
|
return ss, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ss, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
ErrInvalidIP = errors.New("invalid IP address")
|
|
|
|
|
)
|