Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
40812fc
fix(firewall): flush conntrack table after enabling firewall at conta…
qdm12 Feb 21, 2026
ee8d62e
purevpn: switch updater to linux deb local-data and protocol ports
Feb 26, 2026
2a49d27
purevpn: improve resolver fallback and update OpenVPN port defaults
Feb 26, 2026
388e628
purevpn updater: fetch live inventory from app-derived URL
Feb 27, 2026
dbe31bc
purevpn: add hostname-trait server type selection
Feb 27, 2026
32ff15d
purevpn: add deterministic hostname-code location filters
Feb 27, 2026
f81d061
purevpn: add template ingestion and p2p server type support
Feb 27, 2026
6838917
purevpn: merge app local data and add multi-trait filter tests
Feb 27, 2026
2e88ef2
purevpn: switch to city-only filters and match-all tags
Feb 27, 2026
f7b0e54
chore: remove local purevpn test harness scripts from repo
Feb 27, 2026
5a6b7c9
purevpn: add OpenVPN fallback remote lines for port 1194
Feb 27, 2026
57662fc
Merge origin/master into codex/purevpn-deb-updater
Feb 27, 2026
f9ec7ba
chore: remove CSV/TSV PureVPN export tests from repo
Feb 27, 2026
a4afbe4
purevpn: expand city code mappings and tighten inventory-port tests
Feb 27, 2026
eac0f01
purevpn: remove atom secret env override and related tests
Feb 27, 2026
bfe558d
purevpn: remove fallback ports and reseller uid parsing test
Feb 27, 2026
9c63460
chore(deps): tidy purevpn module dependencies
Feb 27, 2026
b89cbbf
purevpn: apply review feedback and split selector features out
Mar 3, 2026
7253ec1
Merge upstream/master into codex/purevpn-deb-updater
Mar 3, 2026
f0247ff
Merge branch 'master' into codex/purevpn-deb-updater
reedog117 Mar 20, 2026
164d724
Merge branch 'master' into codex/purevpn-deb-updater
reedog117 Mar 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
purevpn: remove fallback ports and reseller uid parsing test
  • Loading branch information
Pat committed Feb 27, 2026
commit bfe558d6b66e017be29ebb65906fa6864ddb44ad
12 changes: 0 additions & 12 deletions internal/provider/purevpn/openvpnconf.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package purevpn

import (
"fmt"

"github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/constants/openvpn"
"github.com/qdm12/gluetun/internal/models"
"github.com/qdm12/gluetun/internal/provider/utils"
Expand Down Expand Up @@ -38,14 +35,5 @@ func (p *Provider) OpenVPNConfig(connection models.Connection,
TLSAuth: "2a081d1a94f133e0c3e1b36ff414f609154e6f2c5586abc2452ec54c70ead6d9f0b5e3b7351eb0eac32d6ddb3d7c24d56cccbf25024bdde1c14d56c02eeb058c3f76ea6798b07955bb38b71dd1d359c93f246b00d624929fcc87d6c34baff5f62f8ac7fa054a3fff8982fc9d1847168ab6a7e2f48c16100cb5865e355f3978f0165cdc9e9217cd49634098c58bda0c15b1ce1ef214604e4f7f1f8b94b93a7791486706f0199973bbe9a6fb462bcb72e4e64263f37653098ddbe02de7b4502c88a4ee7c47cd44bcb3853bde2ccc13dc45fe6b75474f31af57f89cecc1ba6940384de9e41b4abbc38710577fcfc471b4c986b17d72707040378b3cfe57dd4cc372", //nolint:lll
}

if connection.Port == 1194 {
fallbackPort := uint16(53)
if connection.Protocol == constants.TCP {
fallbackPort = 80
}
providerSettings.ExtraLines = append(providerSettings.ExtraLines,
"remote "+connection.IP.String()+" "+fmt.Sprint(int(fallbackPort)))
}

return utils.OpenVPNConfig(providerSettings, connection, settings, ipv6Supported)
}
63 changes: 12 additions & 51 deletions internal/provider/purevpn/openvpnconf_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"github.com/qdm12/gluetun/internal/constants/providers"
"github.com/qdm12/gluetun/internal/models"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestProviderOpenVPNConfig_UsesBuiltInCryptoMaterial(t *testing.T) {
Expand Down Expand Up @@ -44,7 +43,7 @@ func TestProviderOpenVPNConfig_UsesBuiltInCryptoMaterial(t *testing.T) {
assert.True(t, hasLineContaining(lines, "</tls-auth>"))
}

func TestOpenVPNConfig_UDP1194AddsUDPFallback(t *testing.T) {
func TestOpenVPNConfig_UsesInventoryPortOnly(t *testing.T) {
t.Parallel()

p := Provider{}
Expand All @@ -56,47 +55,9 @@ func TestOpenVPNConfig_UDP1194AddsUDPFallback(t *testing.T) {

lines := p.OpenVPNConfig(connection, testOpenVPNSettings(), true)

primaryIndex := indexOfLine(lines, "remote 1.2.3.4 1194")
fallbackIndex := indexOfLine(lines, "remote 1.2.3.4 53")
require.NotEqual(t, -1, primaryIndex)
require.NotEqual(t, -1, fallbackIndex)
assert.Less(t, primaryIndex, fallbackIndex)
}

func TestOpenVPNConfig_TCP1194AddsTCPFallback(t *testing.T) {
t.Parallel()

p := Provider{}
connection := models.Connection{
IP: netip.MustParseAddr("1.2.3.4"),
Port: 1194,
Protocol: constants.TCP,
}

lines := p.OpenVPNConfig(connection, testOpenVPNSettings(), true)

primaryIndex := indexOfLine(lines, "remote 1.2.3.4 1194")
fallbackIndex := indexOfLine(lines, "remote 1.2.3.4 80")
require.NotEqual(t, -1, primaryIndex)
require.NotEqual(t, -1, fallbackIndex)
assert.Less(t, primaryIndex, fallbackIndex)
}

func TestOpenVPNConfig_Non1194HasNoFallback(t *testing.T) {
t.Parallel()

p := Provider{}
connection := models.Connection{
IP: netip.MustParseAddr("1.2.3.4"),
Port: 53,
Protocol: constants.UDP,
}

lines := p.OpenVPNConfig(connection, testOpenVPNSettings(), true)

assert.NotEqual(t, -1, indexOfLine(lines, "remote 1.2.3.4 53"))
assert.Equal(t, -1, indexOfLine(lines, "remote 1.2.3.4 1194"))
assert.Equal(t, -1, indexOfLine(lines, "remote 1.2.3.4 80"))
assert.Equal(t, 1, countExactLine(lines, "remote 1.2.3.4 1194"))
assert.Zero(t, countExactLine(lines, "remote 1.2.3.4 53"))
assert.Zero(t, countExactLine(lines, "remote 1.2.3.4 80"))
}

func testOpenVPNSettings() settings.OpenVPN {
Expand All @@ -114,19 +75,19 @@ func testOpenVPNSettings() settings.OpenVPN {
}
}

func indexOfLine(lines []string, target string) int {
for i, line := range lines {
func strPtr(value string) *string { return &value }
func uint16Ptr(value uint16) *uint16 { return &value }
func intPtr(value int) *int { return &value }

func countExactLine(lines []string, target string) (count int) {
for _, line := range lines {
if line == target {
return i
count++
}
}
return -1
return count
}

func strPtr(value string) *string { return &value }
func uint16Ptr(value uint16) *uint16 { return &value }
func intPtr(value int) *int { return &value }

func hasLineContaining(lines []string, needle string) bool {
for _, line := range lines {
if strings.Contains(line, needle) {
Expand Down
10 changes: 0 additions & 10 deletions internal/provider/purevpn/updater/inventory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,6 @@ func Test_parseInventoryURLTemplate(t *testing.T) {
template)
}

func Test_parseResellerUIDFromInventoryOffline(t *testing.T) {
t.Parallel()

content := []byte(`"use strict";module.exports={body:{reseller:{id:1,Uid:"res_5d4565b42f2c5"}}};`)

resellerUID, err := parseResellerUIDFromInventoryOffline(content)
require.NoError(t, err)
assert.Equal(t, "res_5d4565b42f2c5", resellerUID)
}

func Test_buildInventoryURL(t *testing.T) {
t.Parallel()

Expand Down