feat(ivpn): allow no password for account IDs
- When matching `i-xxxx-xxxx-xxxx` username - When matching `ivpn-xxxx-xxxx-xxxx` username
This commit is contained in:
@@ -2,6 +2,7 @@ package settings
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/qdm12/gluetun/internal/configuration/settings/helpers"
|
"github.com/qdm12/gluetun/internal/configuration/settings/helpers"
|
||||||
@@ -73,6 +74,8 @@ type OpenVPN struct {
|
|||||||
Flags []string
|
Flags []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ivpnAccountID = regexp.MustCompile(`^(i|ivpn)\-[a-zA-Z0-9]{4}\-[a-zA-Z0-9]{4}\-[a-zA-Z0-9]{4}$`)
|
||||||
|
|
||||||
func (o OpenVPN) validate(vpnProvider string) (err error) {
|
func (o OpenVPN) validate(vpnProvider string) (err error) {
|
||||||
// Validate version
|
// Validate version
|
||||||
validVersions := []string{constants.Openvpn24, constants.Openvpn25}
|
validVersions := []string{constants.Openvpn24, constants.Openvpn25}
|
||||||
@@ -87,7 +90,10 @@ func (o OpenVPN) validate(vpnProvider string) (err error) {
|
|||||||
return ErrOpenVPNUserIsEmpty
|
return ErrOpenVPNUserIsEmpty
|
||||||
}
|
}
|
||||||
|
|
||||||
if !isCustom && o.Password == "" {
|
passwordRequired := !isCustom &&
|
||||||
|
(vpnProvider != constants.Ivpn || !ivpnAccountID.MatchString(o.User))
|
||||||
|
|
||||||
|
if passwordRequired && o.Password == "" {
|
||||||
return ErrOpenVPNPasswordIsEmpty
|
return ErrOpenVPNPasswordIsEmpty
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
44
internal/configuration/settings/openvpn_test.go
Normal file
44
internal/configuration/settings/openvpn_test.go
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package settings
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_ivpnAccountID(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
s string
|
||||||
|
match bool
|
||||||
|
}{
|
||||||
|
{},
|
||||||
|
{s: "abc"},
|
||||||
|
{s: "i"},
|
||||||
|
{s: "ivpn"},
|
||||||
|
{s: "ivpn-aaaa"},
|
||||||
|
{s: "ivpn-aaaa-aaaa"},
|
||||||
|
{s: "ivpn-aaaa-aaaa-aaa"},
|
||||||
|
{s: "ivpn-aaaa-aaaa-aaaa", match: true},
|
||||||
|
{s: "ivpn-aaaa-aaaa-aaaaa"},
|
||||||
|
{s: "ivpn-a6B7-fP91-Zh6Y", match: true},
|
||||||
|
{s: "i-aaaa"},
|
||||||
|
{s: "i-aaaa-aaaa"},
|
||||||
|
{s: "i-aaaa-aaaa-aaa"},
|
||||||
|
{s: "i-aaaa-aaaa-aaaa", match: true},
|
||||||
|
{s: "i-aaaa-aaaa-aaaaa"},
|
||||||
|
{s: "i-a6B7-fP91-Zh6Y", match: true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, testCase := range testCases {
|
||||||
|
testCase := testCase
|
||||||
|
t.Run(testCase.s, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
match := ivpnAccountID.MatchString(testCase.s)
|
||||||
|
|
||||||
|
assert.Equal(t, testCase.match, match)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user