Persistent server pools (#226)

* GetAllServers with version & timestamp tests
* Storage package to sync servers
* Use storage Sync to get and use servers
This commit is contained in:
Quentin McGaw
2020-08-25 19:38:50 -04:00
committed by GitHub
parent 6fc2b3dd21
commit aa9693a84d
23 changed files with 464 additions and 83 deletions

View File

@@ -9,10 +9,14 @@ import (
"github.com/qdm12/golibs/network"
)
type cyberghost struct{}
type cyberghost struct {
servers []models.CyberghostServer
}
func newCyberghost() *cyberghost {
return &cyberghost{}
func newCyberghost(servers []models.CyberghostServer) *cyberghost {
return &cyberghost{
servers: servers,
}
}
func (c *cyberghost) filterServers(region, group string) (servers []models.CyberghostServer) {

View File

@@ -9,10 +9,14 @@ import (
"github.com/qdm12/golibs/network"
)
type mullvad struct{}
type mullvad struct {
servers []models.MullvadServer
}
func newMullvad() *mullvad {
return &mullvad{}
func newMullvad(servers []models.MullvadServer) *mullvad {
return &mullvad{
servers: servers,
}
}
func (m *mullvad) filterServers(country, city, isp string) (servers []models.MullvadServer) {

View File

@@ -9,10 +9,14 @@ import (
"github.com/qdm12/golibs/network"
)
type nordvpn struct{}
type nordvpn struct {
servers []models.NordvpnServer
}
func newNordvpn() *nordvpn {
return &nordvpn{}
func newNordvpn(servers []models.NordvpnServer) *nordvpn {
return &nordvpn{
servers: servers,
}
}
func (n *nordvpn) filterServers(region string, protocol models.NetworkProtocol, number uint16) (servers []models.NordvpnServer) {

View File

@@ -14,12 +14,14 @@ import (
)
type pia struct {
random random.Random
random random.Random
servers []models.PIAServer
}
func newPrivateInternetAccess() *pia {
func newPrivateInternetAccess(servers []models.PIAServer) *pia {
return &pia{
random: random.NewRandom(),
random: random.NewRandom(),
servers: servers,
}
}

View File

@@ -13,24 +13,24 @@ type Provider interface {
GetPortForward(client network.Client) (port uint16, err error)
}
func New(provider models.VPNProvider) Provider {
func New(provider models.VPNProvider, allServers models.AllServers) Provider {
switch provider {
case constants.PrivateInternetAccess:
return newPrivateInternetAccess()
return newPrivateInternetAccess(allServers.Pia.Servers)
case constants.Mullvad:
return newMullvad()
return newMullvad(allServers.Mullvad.Servers)
case constants.Windscribe:
return newWindscribe()
return newWindscribe(allServers.Windscribe.Servers)
case constants.Surfshark:
return newSurfshark()
return newSurfshark(allServers.Surfshark.Servers)
case constants.Cyberghost:
return newCyberghost()
return newCyberghost(allServers.Cyberghost.Servers)
case constants.Vyprvpn:
return newVyprvpn()
return newVyprvpn(allServers.Vyprvpn.Servers)
case constants.Nordvpn:
return newNordvpn()
return newNordvpn(allServers.Nordvpn.Servers)
case constants.Purevpn:
return newPurevpn()
return newPurevpn(allServers.Purevpn.Servers)
default:
return nil // should never occur
}

View File

@@ -9,10 +9,14 @@ import (
"github.com/qdm12/golibs/network"
)
type purevpn struct{}
type purevpn struct {
servers []models.PurevpnServer
}
func newPurevpn() *purevpn {
return &purevpn{}
func newPurevpn(servers []models.PurevpnServer) *purevpn {
return &purevpn{
servers: servers,
}
}
func (p *purevpn) filterServers(region, country, city string) (servers []models.PurevpnServer) {

View File

@@ -9,10 +9,14 @@ import (
"github.com/qdm12/golibs/network"
)
type surfshark struct{}
type surfshark struct {
servers []models.SurfsharkServer
}
func newSurfshark() *surfshark {
return &surfshark{}
func newSurfshark(servers []models.SurfsharkServer) *surfshark {
return &surfshark{
servers: servers,
}
}
func (s *surfshark) filterServers(region string) (servers []models.SurfsharkServer) {

View File

@@ -9,10 +9,14 @@ import (
"github.com/qdm12/golibs/network"
)
type vyprvpn struct{}
type vyprvpn struct {
servers []models.VyprvpnServer
}
func newVyprvpn() *vyprvpn {
return &vyprvpn{}
func newVyprvpn(servers []models.VyprvpnServer) *vyprvpn {
return &vyprvpn{
servers: servers,
}
}
func (v *vyprvpn) filterServers(region string) (servers []models.VyprvpnServer) {

View File

@@ -9,10 +9,14 @@ import (
"github.com/qdm12/golibs/network"
)
type windscribe struct{}
type windscribe struct {
servers []models.WindscribeServer
}
func newWindscribe() *windscribe {
return &windscribe{}
func newWindscribe(servers []models.WindscribeServer) *windscribe {
return &windscribe{
servers: servers,
}
}
func (w *windscribe) filterServers(region string) (servers []models.WindscribeServer) {