Feature: Protonvpn filter servers with FREE_ONLY

This commit is contained in:
Quentin McGaw
2021-05-23 21:51:12 +00:00
parent bc7246f882
commit 0c4f01a892
6 changed files with 25 additions and 2 deletions

View File

@@ -99,6 +99,8 @@ ENV VPNSP=pia \
SERVER_NUMBER= \
# NordVPN and ProtonVPN only:
SERVER_NAME= \
# ProtonVPN only:
FREE_ONLY= \
# Openvpn
OPENVPN_CIPHER= \
OPENVPN_AUTH= \

View File

@@ -40,7 +40,8 @@ func Test_OpenVPN_JSON(t *testing.T) {
"owned": false,
"custom_port": 0,
"numbers": null,
"encryption_preset": ""
"encryption_preset": "",
"free_only": false
},
"extra_config": {
"encryption_preset": "",

View File

@@ -2,6 +2,7 @@ package configuration
import (
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/golibs/params"
)
func (settings *Provider) protonvpnLines() (lines []string) {
@@ -25,6 +26,10 @@ func (settings *Provider) protonvpnLines() (lines []string) {
lines = append(lines, lastIndent+"Hostnames: "+commaJoin(settings.ServerSelection.Hostnames))
}
if settings.ServerSelection.FreeOnly {
lines = append(lines, lastIndent+"Free only: yes")
}
return lines
}
@@ -71,5 +76,10 @@ func (settings *Provider) readProtonvpn(r reader) (err error) {
return err
}
settings.ServerSelection.FreeOnly, err = r.env.YesNo("FREE_ONLY", params.Default("no"))
if err != nil {
return err
}
return nil
}

View File

@@ -32,6 +32,9 @@ type ServerSelection struct { //nolint:maligned
// PIA
EncryptionPreset string `json:"encryption_preset"`
// ProtonVPN
FreeOnly bool `json:"free_only"`
}
type ExtraConfigOptions struct {

View File

@@ -1,6 +1,8 @@
package protonvpn
import (
"strings"
"github.com/qdm12/gluetun/internal/configuration"
"github.com/qdm12/gluetun/internal/models"
"github.com/qdm12/gluetun/internal/provider/utils"
@@ -15,7 +17,8 @@ func (p *Protonvpn) filterServers(selection configuration.ServerSelection) (
utils.FilterByPossibilities(server.Region, selection.Regions),
utils.FilterByPossibilities(server.City, selection.Cities),
utils.FilterByPossibilities(server.Hostname, selection.Hostnames),
utils.FilterByPossibilities(server.Name, selection.Names):
utils.FilterByPossibilities(server.Name, selection.Names),
selection.FreeOnly && !strings.Contains(strings.ToLower(server.Name), "free"):
default:
servers = append(servers, server)
}

View File

@@ -113,6 +113,10 @@ func NoServerFoundError(selection configuration.ServerSelection) (err error) {
messageParts = append(messageParts, part)
}
if selection.FreeOnly {
messageParts = append(messageParts, "free tier only")
}
message := "for " + strings.Join(messageParts, "; ")
return fmt.Errorf("%w: %s", ErrNoServerFound, message)