2021-02-06 11:05:50 -05:00
|
|
|
package configuration
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"strconv"
|
|
|
|
|
|
|
|
|
|
"github.com/qdm12/gluetun/internal/constants"
|
|
|
|
|
"github.com/qdm12/golibs/params"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func (settings *Provider) readNordvpn(r reader) (err error) {
|
|
|
|
|
settings.Name = constants.Nordvpn
|
2021-08-27 19:10:03 +00:00
|
|
|
servers := r.servers.GetNordvpn()
|
2021-02-06 11:05:50 -05:00
|
|
|
|
|
|
|
|
settings.ServerSelection.TargetIP, err = readTargetIP(r.env)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-27 19:10:03 +00:00
|
|
|
settings.ServerSelection.Regions, err = r.env.CSVInside("REGION", constants.NordvpnRegionChoices(servers))
|
2021-02-06 11:05:50 -05:00
|
|
|
if err != nil {
|
2021-07-23 02:34:15 +00:00
|
|
|
return fmt.Errorf("environment variable REGION: %w", err)
|
2021-02-06 11:05:50 -05:00
|
|
|
}
|
|
|
|
|
|
2021-08-27 19:10:03 +00:00
|
|
|
settings.ServerSelection.Hostnames, err = r.env.CSVInside("SERVER_HOSTNAME", constants.NordvpnHostnameChoices(servers))
|
2021-05-08 22:51:59 +00:00
|
|
|
if err != nil {
|
2021-07-23 02:34:15 +00:00
|
|
|
return fmt.Errorf("environment variable SERVER_HOSTNAME: %w", err)
|
2021-05-08 22:51:59 +00:00
|
|
|
}
|
|
|
|
|
|
2021-02-06 11:05:50 -05:00
|
|
|
settings.ServerSelection.Numbers, err = readNordVPNServerNumbers(r.env)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-14 19:27:13 +00:00
|
|
|
return settings.ServerSelection.OpenVPN.readProtocolOnly(r)
|
2021-02-06 11:05:50 -05:00
|
|
|
}
|
|
|
|
|
|
2021-08-22 20:44:14 +00:00
|
|
|
func readNordVPNServerNumbers(env params.Interface) (numbers []uint16, err error) {
|
2021-06-20 16:39:38 +00:00
|
|
|
const possiblePortsCount = 65537
|
|
|
|
|
possibilities := make([]string, possiblePortsCount)
|
2021-02-06 11:05:50 -05:00
|
|
|
for i := range possibilities {
|
|
|
|
|
possibilities[i] = fmt.Sprintf("%d", i)
|
|
|
|
|
}
|
|
|
|
|
possibilities[65536] = ""
|
|
|
|
|
values, err := env.CSVInside("SERVER_NUMBER", possibilities)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
numbers = make([]uint16, len(values))
|
|
|
|
|
for i := range values {
|
|
|
|
|
n, err := strconv.Atoi(values[i])
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
numbers[i] = uint16(n)
|
|
|
|
|
}
|
|
|
|
|
return numbers, nil
|
|
|
|
|
}
|