fix(slickvpn/updater): only keep 11 servers

- this reverts most of commit e806fe02db.
This commit is contained in:
Quentin McGaw
2025-12-23 03:03:47 +00:00
parent e806fe02db
commit beaa8b5589
10 changed files with 27 additions and 1400 deletions
-14
View File
@@ -92,20 +92,6 @@ func (mr *MockStorageMockRecorder) FilterServers(arg0, arg1 interface{}) *gomock
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FilterServers", reflect.TypeOf((*MockStorage)(nil).FilterServers), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FilterServers", reflect.TypeOf((*MockStorage)(nil).FilterServers), arg0, arg1)
} }
// HardcodedServers mocks base method.
func (m *MockStorage) HardcodedServers() models.AllServers {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "HardcodedServers")
ret0, _ := ret[0].(models.AllServers)
return ret0
}
// HardcodedServers indicates an expected call of HardcodedServers.
func (mr *MockStorageMockRecorder) HardcodedServers() *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HardcodedServers", reflect.TypeOf((*MockStorage)(nil).HardcodedServers))
}
// MockUnzipper is a mock of Unzipper interface. // MockUnzipper is a mock of Unzipper interface.
type MockUnzipper struct { type MockUnzipper struct {
ctrl *gomock.Controller ctrl *gomock.Controller
-1
View File
@@ -8,5 +8,4 @@ import (
type Storage interface { type Storage interface {
FilterServers(provider string, selection settings.ServerSelection) ( FilterServers(provider string, selection settings.ServerSelection) (
servers []models.Server, err error) servers []models.Server, err error)
HardcodedServers() models.AllServers
} }
-1
View File
@@ -43,7 +43,6 @@ type Providers struct {
type Storage interface { type Storage interface {
FilterServers(provider string, selection settings.ServerSelection) ( FilterServers(provider string, selection settings.ServerSelection) (
servers []models.Server, err error) servers []models.Server, err error)
HardcodedServers() models.AllServers
} }
type Extractor interface { type Extractor interface {
+1 -1
View File
@@ -22,7 +22,7 @@ func New(storage common.Storage, randSource rand.Source,
return &Provider{ return &Provider{
storage: storage, storage: storage,
randSource: randSource, randSource: randSource,
Fetcher: updater.New(client, updaterWarner, parallelResolver, storage), Fetcher: updater.New(client, updaterWarner, parallelResolver),
} }
} }
+22 -21
View File
@@ -5,7 +5,7 @@ import (
"fmt" "fmt"
"sort" "sort"
"github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/constants/vpn"
"github.com/qdm12/gluetun/internal/models" "github.com/qdm12/gluetun/internal/models"
"github.com/qdm12/gluetun/internal/provider/common" "github.com/qdm12/gluetun/internal/provider/common"
) )
@@ -14,20 +14,24 @@ func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error, servers []models.Server, err error,
) { ) {
// Since SlickVPN website listing VPN servers https://www.slickvpn.com/locations/ // Since SlickVPN website listing VPN servers https://www.slickvpn.com/locations/
// went to become a pile of trash, we now use the servers data from our servers.json // went to become a pile of trash, we now hardcode the servers data below.
// to check which servers can be resolved. The previous code was dynamically parsing servers = []models.Server{
// their website table of servers and they now list only 11 servers on their website. {Hostname: "gw2.sin2.slickvpn.com", Region: "Asia", Country: "Singapore", City: "Singapore"},
hardcodedServersData := u.storage.HardcodedServers() {Hostname: "gw1.bos1.slickvpn.com", Region: "North America", Country: "United States", City: "Boston"},
slickVPNData, ok := hardcodedServersData.ProviderToServers[providers.SlickVPN] {Hostname: "gw1.cmh1.slickvpn.com", Region: "North America", Country: "United States", City: "Columbus"},
if !ok { {Hostname: "gw1.lax2.slickvpn.com", Region: "North America", Country: "United States", City: "Los Angeles"},
return nil, fmt.Errorf("no hardcoded servers for provider %s", providers.SlickVPN) {Hostname: "gw1.lga2.slickvpn.com", Region: "North America", Country: "United States", City: "New York"},
{Hostname: "gw1.man2.slickvpn.com", Region: "Europe", Country: "United Kingdom", City: "Manchester"},
{Hostname: "gw2.ams3.slickvpn.com", Region: "Europe", Country: "Netherlands", City: "Amsterdam"},
{Hostname: "gw2.hou1.slickvpn.com", Region: "North America", Country: "United States", City: "Houston"},
{Hostname: "gw1.mci2.slickvpn.com", Region: "North America", Country: "United States", City: "Kansas City"},
{Hostname: "gw2.slc1.slickvpn.com", Region: "North America", Country: "United States", City: "Salt Lake City"},
{Hostname: "gw1.stl1.slickvpn.com", Region: "North America", Country: "United States", City: "St Louis"},
} }
hardcodedServers := make([]models.Server, len(slickVPNData.Servers))
copy(hardcodedServers, slickVPNData.Servers)
hosts := make([]string, len(hardcodedServers)) hosts := make([]string, len(servers))
for i := range hardcodedServers { for i := range servers {
hosts[i] = hardcodedServers[i].Hostname hosts[i] = servers[i].Hostname
} }
resolveSettings := parallelResolverSettings(hosts) resolveSettings := parallelResolverSettings(hosts)
@@ -44,14 +48,11 @@ func (u *Updater) FetchServers(ctx context.Context, minServers int) (
common.ErrNotEnoughServers, len(hosts), minServers) common.ErrNotEnoughServers, len(hosts), minServers)
} }
servers = make([]models.Server, 0, len(hostToIPs)) for i := range servers {
for _, server := range hardcodedServers { servers[i].VPN = vpn.OpenVPN
IPs, ok := hostToIPs[server.Hostname] servers[i].TCP = true
if !ok || len(IPs) == 0 { servers[i].UDP = true
continue servers[i].IPs = hostToIPs[servers[i].Hostname]
}
server.IPs = IPs
servers = append(servers, server)
} }
sort.Sort(models.SortableServers(servers)) sort.Sort(models.SortableServers(servers))
@@ -10,16 +10,14 @@ type Updater struct {
client *http.Client client *http.Client
parallelResolver common.ParallelResolver parallelResolver common.ParallelResolver
warner common.Warner warner common.Warner
storage common.Storage
} }
func New(client *http.Client, warner common.Warner, func New(client *http.Client, warner common.Warner,
parallelResolver common.ParallelResolver, storage common.Storage, parallelResolver common.ParallelResolver,
) *Updater { ) *Updater {
return &Updater{ return &Updater{
client: client, client: client,
parallelResolver: parallelResolver, parallelResolver: parallelResolver,
warner: warner, warner: warner,
storage: storage,
} }
} }
-6
View File
@@ -19,9 +19,3 @@ func parseHardcodedServers() (allServers models.AllServers, err error) {
err = decoder.Decode(&allServers) err = decoder.Decode(&allServers)
return allServers, err return allServers, err
} }
// HardcodedServers returns the hardcoded servers.
// Warning: mutating the returned value will impact the storage's internal state.
func (s *Storage) HardcodedServers() models.AllServers {
return s.hardcodedServers
}
+1 -1
View File
@@ -12,7 +12,7 @@ import (
"golang.org/x/text/language" "golang.org/x/text/language"
) )
// readFromFile reads the servers from servers.json. // readFromFile reads the servers from server.json.
// It only reads servers that have the same version as the hardcoded servers version // It only reads servers that have the same version as the hardcoded servers version
// to avoid JSON decoding errors. // to avoid JSON decoding errors.
func (s *Storage) readFromFile(filepath string, hardcodedVersions map[string]uint16) ( func (s *Storage) readFromFile(filepath string, hardcodedVersions map[string]uint16) (
File diff suppressed because it is too large Load Diff
-6
View File
@@ -22,12 +22,6 @@ func MatchData(data string) MatchFunc {
} }
} }
func MatchClasses(classStrings ...string) MatchFunc {
return func(node *html.Node) (match bool) {
return HasClassStrings(node, classStrings...)
}
}
func DirectChild(parent *html.Node, func DirectChild(parent *html.Node,
matchFunc MatchFunc, matchFunc MatchFunc,
) (child *html.Node) { ) (child *html.Node) {