diff --git a/internal/settings/mullvad.go b/internal/settings/mullvad.go new file mode 100644 index 00000000..328c966b --- /dev/null +++ b/internal/settings/mullvad.go @@ -0,0 +1,55 @@ +package settings + +import ( + "strings" + + "github.com/qdm12/private-internet-access-docker/internal/models" + "github.com/qdm12/private-internet-access-docker/internal/params" +) + +// Mullvad contains the settings to connect to a Mullvad server +type Mullvad struct { + User string + Country models.MullvadCountry + City models.MullvadCity + ISP models.MullvadProvider + Port uint16 +} + +func (m *Mullvad) String() string { + + settingsList := []string{ + "Mullvad settings:", + "User: [redacted]", + "Country: " + string(m.Country), + "City: " + string(m.City), + "ISP: " + string(m.ISP), + "Port: " + string(m.Port), + } + return strings.Join(settingsList, "\n |--") +} + +// GetMullvadSettings obtains Mullvad settings from environment variables using the params package. +func GetMullvadSettings(params params.ParamsReader) (settings Mullvad, err error) { + settings.User, err = params.GetUser() + if err != nil { + return settings, err + } + settings.Country, err = params.GetMullvadCountry() + if err != nil { + return settings, err + } + settings.City, err = params.GetMullvadCity() + if err != nil { + return settings, err + } + settings.ISP, err = params.GetMullvadISP() + if err != nil { + return settings, err + } + settings.Port, err = params.GetMullvadPort() + if err != nil { + return settings, err + } + return settings, nil +} diff --git a/internal/settings/settings.go b/internal/settings/settings.go index 7b56dc19..e49a187e 100644 --- a/internal/settings/settings.go +++ b/internal/settings/settings.go @@ -1,6 +1,7 @@ package settings import ( + "fmt" "strings" "github.com/qdm12/private-internet-access-docker/internal/params" @@ -8,8 +9,10 @@ import ( // Settings contains all settings for the program to run type Settings struct { + VPNSP string OpenVPN OpenVPN PIA PIA + Mullvad Mullvad DNS DNS Firewall Firewall TinyProxy TinyProxy @@ -17,10 +20,17 @@ type Settings struct { } func (s *Settings) String() string { + var vpnServiceProvider string + switch s.VPNSP { + case "pia": + vpnServiceProvider = s.PIA.String() + case "mullvad": + vpnServiceProvider = s.Mullvad.String() + } return strings.Join([]string{ "Settings summary below:", s.OpenVPN.String(), - s.PIA.String(), + vpnServiceProvider, s.DNS.String(), s.Firewall.String(), s.TinyProxy.String(), @@ -32,10 +42,28 @@ func (s *Settings) String() string { // GetAllSettings obtains all settings for the program and returns an error as soon // as an error is encountered reading them. func GetAllSettings(params params.ParamsReader) (settings Settings, err error) { + settings.VPNSP, err = params.GetVPNSP() + if err != nil { + return settings, err + } settings.OpenVPN, err = GetOpenVPNSettings(params) if err != nil { return settings, err } + switch settings.VPNSP { + case "pia": + settings.PIA, err = GetPIASettings(params) + if err != nil { + return settings, err + } + case "mullvad": + settings.Mullvad, err = GetMullvadSettings(params) + if err != nil { + return settings, err + } + default: + return settings, fmt.Errorf("VPN service provider %q is not valid", settings.VPNSP) + } settings.PIA, err = GetPIASettings(params) if err != nil { return settings, err