diff --git a/internal/provider/airvpn/provider.go b/internal/provider/airvpn/provider.go index 377506ec..e827cc43 100644 --- a/internal/provider/airvpn/provider.go +++ b/internal/provider/airvpn/provider.go @@ -5,8 +5,8 @@ import ( "net/http" "github.com/qdm12/gluetun/internal/constants/providers" - "github.com/qdm12/gluetun/internal/provider/airvpn/updater" "github.com/qdm12/gluetun/internal/provider/common" + "github.com/qdm12/gluetun/pkg/updaters/airvpn" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client), + Fetcher: airvpn.New(client), } } diff --git a/internal/provider/common/updater.go b/internal/provider/common/updater.go index c86c98b5..b3c77d7d 100644 --- a/internal/provider/common/updater.go +++ b/internal/provider/common/updater.go @@ -18,6 +18,7 @@ var ( type Fetcher interface { FetchServers(ctx context.Context, minServers int) (servers []models.Server, err error) + Version() uint16 } type ParallelResolver interface { diff --git a/internal/provider/cyberghost/provider.go b/internal/provider/cyberghost/provider.go index f7cd49b4..87ac7194 100644 --- a/internal/provider/cyberghost/provider.go +++ b/internal/provider/cyberghost/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/cyberghost/updater" + "github.com/qdm12/gluetun/pkg/updaters/cyberghost" ) type Provider struct { @@ -20,7 +20,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(parallelResolver, updaterWarner), + Fetcher: cyberghost.New(parallelResolver, updaterWarner), } } diff --git a/internal/provider/example/provider.go b/internal/provider/example/provider.go index 020a1b42..579b9ee3 100644 --- a/internal/provider/example/provider.go +++ b/internal/provider/example/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/example/updater" + "github.com/qdm12/gluetun/pkg/updaters/example" ) type Provider struct { @@ -23,7 +23,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(updaterWarner, unzipper, client, parallelResolver), + Fetcher: example.New(updaterWarner, unzipper, client, parallelResolver), } } diff --git a/internal/provider/expressvpn/provider.go b/internal/provider/expressvpn/provider.go index de55d2b3..992b00d4 100644 --- a/internal/provider/expressvpn/provider.go +++ b/internal/provider/expressvpn/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/expressvpn/updater" + "github.com/qdm12/gluetun/pkg/updaters/expressvpn" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(unzipper, updaterWarner, parallelResolver), + Fetcher: expressvpn.New(unzipper, updaterWarner, parallelResolver), } } diff --git a/internal/provider/fastestvpn/provider.go b/internal/provider/fastestvpn/provider.go index d804894b..347e0281 100644 --- a/internal/provider/fastestvpn/provider.go +++ b/internal/provider/fastestvpn/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/fastestvpn/updater" + "github.com/qdm12/gluetun/pkg/updaters/fastestvpn" ) type Provider struct { @@ -22,7 +22,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, updaterWarner, parallelResolver), + Fetcher: fastestvpn.New(client, updaterWarner, parallelResolver), } } diff --git a/internal/provider/giganews/provider.go b/internal/provider/giganews/provider.go index 99a5afba..571fa4cc 100644 --- a/internal/provider/giganews/provider.go +++ b/internal/provider/giganews/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/giganews/updater" + "github.com/qdm12/gluetun/pkg/updaters/giganews" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(unzipper, updaterWarner, parallelResolver), + Fetcher: giganews.New(unzipper, updaterWarner, parallelResolver), } } diff --git a/internal/provider/hidemyass/provider.go b/internal/provider/hidemyass/provider.go index cc778d16..865b1635 100644 --- a/internal/provider/hidemyass/provider.go +++ b/internal/provider/hidemyass/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/hidemyass/updater" + "github.com/qdm12/gluetun/pkg/updaters/hidemyass" ) type Provider struct { @@ -22,7 +22,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, updaterWarner, parallelResolver), + Fetcher: hidemyass.New(client, updaterWarner, parallelResolver), } } diff --git a/internal/provider/ipvanish/provider.go b/internal/provider/ipvanish/provider.go index c00dcdc6..d5f5b7c6 100644 --- a/internal/provider/ipvanish/provider.go +++ b/internal/provider/ipvanish/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/ipvanish/updater" + "github.com/qdm12/gluetun/pkg/updaters/ipvanish" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(unzipper, updaterWarner, parallelResolver), + Fetcher: ipvanish.New(unzipper, updaterWarner, parallelResolver), } } diff --git a/internal/provider/ivpn/provider.go b/internal/provider/ivpn/provider.go index 1bee35aa..50cb6ba3 100644 --- a/internal/provider/ivpn/provider.go +++ b/internal/provider/ivpn/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/ivpn/updater" + "github.com/qdm12/gluetun/pkg/updaters/ivpn" ) type Provider struct { @@ -22,7 +22,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, updaterWarner, parallelResolver), + Fetcher: ivpn.New(client, updaterWarner, parallelResolver), } } diff --git a/internal/provider/mullvad/provider.go b/internal/provider/mullvad/provider.go index 45e927e6..fc2be98c 100644 --- a/internal/provider/mullvad/provider.go +++ b/internal/provider/mullvad/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/mullvad/updater" + "github.com/qdm12/gluetun/pkg/updaters/mullvad" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client), + Fetcher: mullvad.New(client), } } diff --git a/internal/provider/nordvpn/provider.go b/internal/provider/nordvpn/provider.go index fd885b27..96a81ab9 100644 --- a/internal/provider/nordvpn/provider.go +++ b/internal/provider/nordvpn/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/nordvpn/updater" + "github.com/qdm12/gluetun/pkg/updaters/nordvpn" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, updaterWarner), + Fetcher: nordvpn.New(client, updaterWarner), } } diff --git a/internal/provider/perfectprivacy/provider.go b/internal/provider/perfectprivacy/provider.go index 5ca1b4d9..eba41324 100644 --- a/internal/provider/perfectprivacy/provider.go +++ b/internal/provider/perfectprivacy/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/perfectprivacy/updater" + "github.com/qdm12/gluetun/pkg/updaters/perfectprivacy" ) type Provider struct { @@ -20,7 +20,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(unzipper, updaterWarner), + Fetcher: perfectprivacy.New(unzipper, updaterWarner), } } diff --git a/internal/provider/privado/provider.go b/internal/provider/privado/provider.go index 1fb99136..059215e9 100644 --- a/internal/provider/privado/provider.go +++ b/internal/provider/privado/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/privado/updater" + "github.com/qdm12/gluetun/pkg/updaters/privado" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, updaterWarner), + Fetcher: privado.New(client, updaterWarner), } } diff --git a/internal/provider/privateinternetaccess/provider.go b/internal/provider/privateinternetaccess/provider.go index ca64f31a..42d2b917 100644 --- a/internal/provider/privateinternetaccess/provider.go +++ b/internal/provider/privateinternetaccess/provider.go @@ -8,7 +8,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/privateinternetaccess/updater" + "github.com/qdm12/gluetun/pkg/updaters/privateinternetaccess" ) type Provider struct { @@ -30,7 +30,7 @@ func New(storage common.Storage, randSource rand.Source, timeNow: timeNow, randSource: randSource, portForwardPath: jsonPortForwardPath, - Fetcher: updater.New(client), + Fetcher: privateinternetaccess.New(client), } } diff --git a/internal/provider/privatevpn/provider.go b/internal/provider/privatevpn/provider.go index 72221727..c288890e 100644 --- a/internal/provider/privatevpn/provider.go +++ b/internal/provider/privatevpn/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/privatevpn/updater" + "github.com/qdm12/gluetun/pkg/updaters/privatevpn" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(unzipper, updaterWarner, parallelResolver), + Fetcher: privatevpn.New(unzipper, updaterWarner, parallelResolver), } } diff --git a/internal/provider/protonvpn/provider.go b/internal/provider/protonvpn/provider.go index 8af0457f..d3bba326 100644 --- a/internal/provider/protonvpn/provider.go +++ b/internal/provider/protonvpn/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/protonvpn/updater" + "github.com/qdm12/gluetun/pkg/updaters/protonvpn" ) type Provider struct { @@ -23,7 +23,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, updaterWarner, email, password), + Fetcher: protonvpn.New(client, updaterWarner, email, password), } } diff --git a/internal/provider/purevpn/provider.go b/internal/provider/purevpn/provider.go index f95d16c2..baa7653e 100644 --- a/internal/provider/purevpn/provider.go +++ b/internal/provider/purevpn/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/purevpn/updater" + "github.com/qdm12/gluetun/pkg/updaters/purevpn" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(ipFetcher, unzipper, updaterWarner, parallelResolver), + Fetcher: purevpn.New(ipFetcher, unzipper, updaterWarner, parallelResolver), } } diff --git a/internal/provider/slickvpn/provider.go b/internal/provider/slickvpn/provider.go index a41d60a8..52dccb71 100644 --- a/internal/provider/slickvpn/provider.go +++ b/internal/provider/slickvpn/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/slickvpn/updater" + "github.com/qdm12/gluetun/pkg/updaters/slickvpn" ) type Provider struct { @@ -22,7 +22,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, updaterWarner, parallelResolver), + Fetcher: slickvpn.New(client, updaterWarner, parallelResolver), } } diff --git a/internal/provider/surfshark/provider.go b/internal/provider/surfshark/provider.go index ef6a6d48..bf4751ab 100644 --- a/internal/provider/surfshark/provider.go +++ b/internal/provider/surfshark/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/surfshark/updater" + "github.com/qdm12/gluetun/pkg/updaters/surfshark" ) type Provider struct { @@ -22,7 +22,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, unzipper, updaterWarner, parallelResolver), + Fetcher: surfshark.New(client, unzipper, updaterWarner, parallelResolver), } } diff --git a/internal/provider/surfshark/updater/resolve.go b/internal/provider/surfshark/updater/resolve.go deleted file mode 100644 index d0b3fa0c..00000000 --- a/internal/provider/surfshark/updater/resolve.go +++ /dev/null @@ -1,28 +0,0 @@ -package updater - -import ( - "time" - - "github.com/qdm12/gluetun/internal/updater/resolver" -) - -func parallelResolverSettings(hosts []string) (settings resolver.ParallelSettings) { - const ( - maxFailRatio = 0.1 - maxDuration = 20 * time.Second - betweenDuration = time.Second - maxNoNew = 2 - maxFails = 2 - ) - return resolver.ParallelSettings{ - Hosts: hosts, - MaxFailRatio: maxFailRatio, - Repeat: resolver.RepeatSettings{ - MaxDuration: maxDuration, - BetweenDuration: betweenDuration, - MaxNoNew: maxNoNew, - MaxFails: maxFails, - SortIPs: true, - }, - } -} diff --git a/internal/provider/torguard/provider.go b/internal/provider/torguard/provider.go index 27f694b4..80ead6e4 100644 --- a/internal/provider/torguard/provider.go +++ b/internal/provider/torguard/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/torguard/updater" + "github.com/qdm12/gluetun/pkg/updaters/torguard" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(unzipper, updaterWarner, parallelResolver), + Fetcher: torguard.New(unzipper, updaterWarner, parallelResolver), } } diff --git a/internal/provider/torguard/updater/resolve.go b/internal/provider/torguard/updater/resolve.go deleted file mode 100644 index d0b3fa0c..00000000 --- a/internal/provider/torguard/updater/resolve.go +++ /dev/null @@ -1,28 +0,0 @@ -package updater - -import ( - "time" - - "github.com/qdm12/gluetun/internal/updater/resolver" -) - -func parallelResolverSettings(hosts []string) (settings resolver.ParallelSettings) { - const ( - maxFailRatio = 0.1 - maxDuration = 20 * time.Second - betweenDuration = time.Second - maxNoNew = 2 - maxFails = 2 - ) - return resolver.ParallelSettings{ - Hosts: hosts, - MaxFailRatio: maxFailRatio, - Repeat: resolver.RepeatSettings{ - MaxDuration: maxDuration, - BetweenDuration: betweenDuration, - MaxNoNew: maxNoNew, - MaxFails: maxFails, - SortIPs: true, - }, - } -} diff --git a/internal/provider/torguard/updater/updater.go b/internal/provider/torguard/updater/updater.go deleted file mode 100644 index d61e235d..00000000 --- a/internal/provider/torguard/updater/updater.go +++ /dev/null @@ -1,21 +0,0 @@ -package updater - -import ( - "github.com/qdm12/gluetun/internal/provider/common" -) - -type Updater struct { - unzipper common.Unzipper - parallelResolver common.ParallelResolver - warner common.Warner -} - -func New(unzipper common.Unzipper, warner common.Warner, - parallelResolver common.ParallelResolver, -) *Updater { - return &Updater{ - unzipper: unzipper, - parallelResolver: parallelResolver, - warner: warner, - } -} diff --git a/internal/provider/utils/nofetcher.go b/internal/provider/utils/nofetcher.go index 275808e9..f434ecef 100644 --- a/internal/provider/utils/nofetcher.go +++ b/internal/provider/utils/nofetcher.go @@ -25,3 +25,7 @@ func (n *NoFetcher) FetchServers(context.Context, int) ( ) { return nil, fmt.Errorf("%w: for %s", ErrFetcherNotSupported, n.providerName) } + +func (n *NoFetcher) Version() uint16 { + return 1 +} diff --git a/internal/provider/vpnsecure/provider.go b/internal/provider/vpnsecure/provider.go index 89cfeb00..f1061015 100644 --- a/internal/provider/vpnsecure/provider.go +++ b/internal/provider/vpnsecure/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/vpnsecure/updater" + "github.com/qdm12/gluetun/pkg/updaters/vpnsecure" ) type Provider struct { @@ -22,7 +22,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, updaterWarner, parallelResolver), + Fetcher: vpnsecure.New(client, updaterWarner, parallelResolver), } } diff --git a/internal/provider/vpnsecure/updater/updater.go b/internal/provider/vpnsecure/updater/updater.go deleted file mode 100644 index df4427cc..00000000 --- a/internal/provider/vpnsecure/updater/updater.go +++ /dev/null @@ -1,23 +0,0 @@ -package updater - -import ( - "net/http" - - "github.com/qdm12/gluetun/internal/provider/common" -) - -type Updater struct { - client *http.Client - parallelResolver common.ParallelResolver - warner common.Warner -} - -func New(client *http.Client, warner common.Warner, - parallelResolver common.ParallelResolver, -) *Updater { - return &Updater{ - client: client, - parallelResolver: parallelResolver, - warner: warner, - } -} diff --git a/internal/provider/vpnunlimited/provider.go b/internal/provider/vpnunlimited/provider.go index 1f8b1522..ebb49ab3 100644 --- a/internal/provider/vpnunlimited/provider.go +++ b/internal/provider/vpnunlimited/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/vpnunlimited/updater" + "github.com/qdm12/gluetun/pkg/updaters/vpnunlimited" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(unzipper, updaterWarner, parallelResolver), + Fetcher: vpnunlimited.New(unzipper, updaterWarner, parallelResolver), } } diff --git a/internal/provider/vpnunlimited/updater/resolve.go b/internal/provider/vpnunlimited/updater/resolve.go deleted file mode 100644 index d0b3fa0c..00000000 --- a/internal/provider/vpnunlimited/updater/resolve.go +++ /dev/null @@ -1,28 +0,0 @@ -package updater - -import ( - "time" - - "github.com/qdm12/gluetun/internal/updater/resolver" -) - -func parallelResolverSettings(hosts []string) (settings resolver.ParallelSettings) { - const ( - maxFailRatio = 0.1 - maxDuration = 20 * time.Second - betweenDuration = time.Second - maxNoNew = 2 - maxFails = 2 - ) - return resolver.ParallelSettings{ - Hosts: hosts, - MaxFailRatio: maxFailRatio, - Repeat: resolver.RepeatSettings{ - MaxDuration: maxDuration, - BetweenDuration: betweenDuration, - MaxNoNew: maxNoNew, - MaxFails: maxFails, - SortIPs: true, - }, - } -} diff --git a/internal/provider/vpnunlimited/updater/updater.go b/internal/provider/vpnunlimited/updater/updater.go deleted file mode 100644 index d61e235d..00000000 --- a/internal/provider/vpnunlimited/updater/updater.go +++ /dev/null @@ -1,21 +0,0 @@ -package updater - -import ( - "github.com/qdm12/gluetun/internal/provider/common" -) - -type Updater struct { - unzipper common.Unzipper - parallelResolver common.ParallelResolver - warner common.Warner -} - -func New(unzipper common.Unzipper, warner common.Warner, - parallelResolver common.ParallelResolver, -) *Updater { - return &Updater{ - unzipper: unzipper, - parallelResolver: parallelResolver, - warner: warner, - } -} diff --git a/internal/provider/vyprvpn/provider.go b/internal/provider/vyprvpn/provider.go index f9977f8a..c3fee649 100644 --- a/internal/provider/vyprvpn/provider.go +++ b/internal/provider/vyprvpn/provider.go @@ -5,7 +5,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/vyprvpn/updater" + "github.com/qdm12/gluetun/pkg/updaters/vyprvpn" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(unzipper, updaterWarner, parallelResolver), + Fetcher: vyprvpn.New(unzipper, updaterWarner, parallelResolver), } } diff --git a/internal/provider/vyprvpn/updater/updater.go b/internal/provider/vyprvpn/updater/updater.go deleted file mode 100644 index d61e235d..00000000 --- a/internal/provider/vyprvpn/updater/updater.go +++ /dev/null @@ -1,21 +0,0 @@ -package updater - -import ( - "github.com/qdm12/gluetun/internal/provider/common" -) - -type Updater struct { - unzipper common.Unzipper - parallelResolver common.ParallelResolver - warner common.Warner -} - -func New(unzipper common.Unzipper, warner common.Warner, - parallelResolver common.ParallelResolver, -) *Updater { - return &Updater{ - unzipper: unzipper, - parallelResolver: parallelResolver, - warner: warner, - } -} diff --git a/internal/provider/windscribe/provider.go b/internal/provider/windscribe/provider.go index 66b284fb..10fe2fe1 100644 --- a/internal/provider/windscribe/provider.go +++ b/internal/provider/windscribe/provider.go @@ -6,7 +6,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/windscribe/updater" + "github.com/qdm12/gluetun/pkg/updaters/windscribe" ) type Provider struct { @@ -21,7 +21,7 @@ func New(storage common.Storage, randSource rand.Source, return &Provider{ storage: storage, randSource: randSource, - Fetcher: updater.New(client, updaterWarner), + Fetcher: windscribe.New(client, updaterWarner), } } diff --git a/internal/provider/airvpn/updater/api.go b/pkg/updaters/airvpn/api.go similarity index 99% rename from internal/provider/airvpn/updater/api.go rename to pkg/updaters/airvpn/api.go index e5596d8f..c3d86f2c 100644 --- a/internal/provider/airvpn/updater/api.go +++ b/pkg/updaters/airvpn/api.go @@ -1,4 +1,4 @@ -package updater +package airvpn import ( "context" diff --git a/internal/provider/airvpn/updater/servers.go b/pkg/updaters/airvpn/servers.go similarity index 99% rename from internal/provider/airvpn/updater/servers.go rename to pkg/updaters/airvpn/servers.go index d5105e1a..dc89ab10 100644 --- a/internal/provider/airvpn/updater/servers.go +++ b/pkg/updaters/airvpn/servers.go @@ -1,4 +1,4 @@ -package updater +package airvpn import ( "context" diff --git a/internal/provider/mullvad/updater/updater.go b/pkg/updaters/airvpn/updater.go similarity index 70% rename from internal/provider/mullvad/updater/updater.go rename to pkg/updaters/airvpn/updater.go index a987c0fd..ff16c4d0 100644 --- a/internal/provider/mullvad/updater/updater.go +++ b/pkg/updaters/airvpn/updater.go @@ -1,4 +1,4 @@ -package updater +package airvpn import ( "net/http" @@ -13,3 +13,7 @@ func New(client *http.Client) *Updater { client: client, } } + +func (u *Updater) Version() uint16 { + return 1 +} diff --git a/internal/provider/cyberghost/updater/constants.go b/pkg/updaters/cyberghost/constants.go similarity index 99% rename from internal/provider/cyberghost/updater/constants.go rename to pkg/updaters/cyberghost/constants.go index 698fa986..20484fa5 100644 --- a/internal/provider/cyberghost/updater/constants.go +++ b/pkg/updaters/cyberghost/constants.go @@ -1,4 +1,4 @@ -package updater +package cyberghost import "github.com/qdm12/gluetun/internal/constants" diff --git a/internal/provider/cyberghost/updater/countries.go b/pkg/updaters/cyberghost/countries.go similarity index 95% rename from internal/provider/cyberghost/updater/countries.go rename to pkg/updaters/cyberghost/countries.go index 0b0263be..4a770201 100644 --- a/internal/provider/cyberghost/updater/countries.go +++ b/pkg/updaters/cyberghost/countries.go @@ -1,4 +1,4 @@ -package updater +package cyberghost func mergeCountryCodes(base, extend map[string]string) (merged map[string]string) { merged = make(map[string]string, len(base)) diff --git a/internal/provider/cyberghost/updater/hosttoserver.go b/pkg/updaters/cyberghost/hosttoserver.go similarity index 98% rename from internal/provider/cyberghost/updater/hosttoserver.go rename to pkg/updaters/cyberghost/hosttoserver.go index 32b6ad3f..02d7304b 100644 --- a/internal/provider/cyberghost/updater/hosttoserver.go +++ b/pkg/updaters/cyberghost/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package cyberghost import ( "net/netip" diff --git a/internal/provider/cyberghost/updater/resolve.go b/pkg/updaters/cyberghost/resolve.go similarity index 96% rename from internal/provider/cyberghost/updater/resolve.go rename to pkg/updaters/cyberghost/resolve.go index 49e984cb..1f458521 100644 --- a/internal/provider/cyberghost/updater/resolve.go +++ b/pkg/updaters/cyberghost/resolve.go @@ -1,4 +1,4 @@ -package updater +package cyberghost import ( "time" diff --git a/internal/provider/cyberghost/updater/servers.go b/pkg/updaters/cyberghost/servers.go similarity index 98% rename from internal/provider/cyberghost/updater/servers.go rename to pkg/updaters/cyberghost/servers.go index 4b6fd4b5..b9da8dc2 100644 --- a/internal/provider/cyberghost/updater/servers.go +++ b/pkg/updaters/cyberghost/servers.go @@ -1,4 +1,4 @@ -package updater +package cyberghost import ( "context" diff --git a/internal/provider/cyberghost/updater/updater.go b/pkg/updaters/cyberghost/updater.go similarity index 80% rename from internal/provider/cyberghost/updater/updater.go rename to pkg/updaters/cyberghost/updater.go index b6f3aae5..66855395 100644 --- a/internal/provider/cyberghost/updater/updater.go +++ b/pkg/updaters/cyberghost/updater.go @@ -1,4 +1,4 @@ -package updater +package cyberghost import ( "github.com/qdm12/gluetun/internal/provider/common" @@ -15,3 +15,7 @@ func New(parallelResolver common.ParallelResolver, warner common.Warner) *Update warner: warner, } } + +func (u *Updater) Version() uint16 { + return 5 //nolint:mnd +} diff --git a/internal/provider/example/updater/api.go b/pkg/updaters/example/api.go similarity index 98% rename from internal/provider/example/updater/api.go rename to pkg/updaters/example/api.go index 4087db30..8be509c6 100644 --- a/internal/provider/example/updater/api.go +++ b/pkg/updaters/example/api.go @@ -1,4 +1,4 @@ -package updater +package example import ( "context" diff --git a/internal/provider/example/updater/resolve.go b/pkg/updaters/example/resolve.go similarity index 98% rename from internal/provider/example/updater/resolve.go rename to pkg/updaters/example/resolve.go index 4f976861..2a62ef33 100644 --- a/internal/provider/example/updater/resolve.go +++ b/pkg/updaters/example/resolve.go @@ -1,4 +1,4 @@ -package updater +package example import ( "time" diff --git a/internal/provider/example/updater/servers.go b/pkg/updaters/example/servers.go similarity index 99% rename from internal/provider/example/updater/servers.go rename to pkg/updaters/example/servers.go index 8e38e765..141b6eb3 100644 --- a/internal/provider/example/updater/servers.go +++ b/pkg/updaters/example/servers.go @@ -1,4 +1,4 @@ -package updater +package example import ( "context" diff --git a/internal/provider/example/updater/updater.go b/pkg/updaters/example/updater.go similarity index 90% rename from internal/provider/example/updater/updater.go rename to pkg/updaters/example/updater.go index a3abfbdb..82e7b0e6 100644 --- a/internal/provider/example/updater/updater.go +++ b/pkg/updaters/example/updater.go @@ -1,4 +1,4 @@ -package updater +package example import ( "net/http" @@ -25,3 +25,7 @@ func New(warner common.Warner, unzipper common.Unzipper, warner: warner, } } + +func (u *Updater) Version() uint16 { + return 1 +} diff --git a/internal/provider/expressvpn/updater/hardcoded.go b/pkg/updaters/expressvpn/hardcoded.go similarity index 99% rename from internal/provider/expressvpn/updater/hardcoded.go rename to pkg/updaters/expressvpn/hardcoded.go index 7961f973..ffbd60f3 100644 --- a/internal/provider/expressvpn/updater/hardcoded.go +++ b/pkg/updaters/expressvpn/hardcoded.go @@ -1,4 +1,4 @@ -package updater +package expressvpn import ( "github.com/qdm12/gluetun/internal/models" diff --git a/internal/provider/expressvpn/updater/resolve.go b/pkg/updaters/expressvpn/resolve.go similarity index 96% rename from internal/provider/expressvpn/updater/resolve.go rename to pkg/updaters/expressvpn/resolve.go index e51b05d7..c1400974 100644 --- a/internal/provider/expressvpn/updater/resolve.go +++ b/pkg/updaters/expressvpn/resolve.go @@ -1,4 +1,4 @@ -package updater +package expressvpn import ( "time" diff --git a/internal/provider/expressvpn/updater/servers.go b/pkg/updaters/expressvpn/servers.go similarity index 98% rename from internal/provider/expressvpn/updater/servers.go rename to pkg/updaters/expressvpn/servers.go index eed1b8a9..32f19c1e 100644 --- a/internal/provider/expressvpn/updater/servers.go +++ b/pkg/updaters/expressvpn/servers.go @@ -1,4 +1,4 @@ -package updater +package expressvpn import ( "context" diff --git a/pkg/updaters/expressvpn/updater.go b/pkg/updaters/expressvpn/updater.go new file mode 100644 index 00000000..6e6da54c --- /dev/null +++ b/pkg/updaters/expressvpn/updater.go @@ -0,0 +1,25 @@ +package expressvpn + +import ( + "github.com/qdm12/gluetun/internal/provider/common" +) + +type Updater struct { + unzipper common.Unzipper + parallelResolver common.ParallelResolver + warner common.Warner +} + +func New(unzipper common.Unzipper, warner common.Warner, + parallelResolver common.ParallelResolver, +) *Updater { + return &Updater{ + unzipper: unzipper, + parallelResolver: parallelResolver, + warner: warner, + } +} + +func (u *Updater) Version() uint16 { + return 2 //nolint:mnd +} diff --git a/internal/provider/fastestvpn/updater/api.go b/pkg/updaters/fastestvpn/api.go similarity index 99% rename from internal/provider/fastestvpn/updater/api.go rename to pkg/updaters/fastestvpn/api.go index 6776d120..7c31ad36 100644 --- a/internal/provider/fastestvpn/updater/api.go +++ b/pkg/updaters/fastestvpn/api.go @@ -1,4 +1,4 @@ -package updater +package fastestvpn import ( "bytes" diff --git a/internal/provider/fastestvpn/updater/api_test.go b/pkg/updaters/fastestvpn/api_test.go similarity index 99% rename from internal/provider/fastestvpn/updater/api_test.go rename to pkg/updaters/fastestvpn/api_test.go index 9c31ed86..bb58a1c0 100644 --- a/internal/provider/fastestvpn/updater/api_test.go +++ b/pkg/updaters/fastestvpn/api_test.go @@ -1,4 +1,4 @@ -package updater +package fastestvpn import ( "context" diff --git a/internal/provider/fastestvpn/updater/hosttoserver.go b/pkg/updaters/fastestvpn/hosttoserver.go similarity index 99% rename from internal/provider/fastestvpn/updater/hosttoserver.go rename to pkg/updaters/fastestvpn/hosttoserver.go index f2be88be..7b8da9f6 100644 --- a/internal/provider/fastestvpn/updater/hosttoserver.go +++ b/pkg/updaters/fastestvpn/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package fastestvpn import ( "net/netip" diff --git a/internal/provider/fastestvpn/updater/resolve.go b/pkg/updaters/fastestvpn/resolve.go similarity index 96% rename from internal/provider/fastestvpn/updater/resolve.go rename to pkg/updaters/fastestvpn/resolve.go index 9af5b9ee..38e9b1fe 100644 --- a/internal/provider/fastestvpn/updater/resolve.go +++ b/pkg/updaters/fastestvpn/resolve.go @@ -1,4 +1,4 @@ -package updater +package fastestvpn import ( "time" diff --git a/internal/provider/fastestvpn/updater/servers.go b/pkg/updaters/fastestvpn/servers.go similarity index 98% rename from internal/provider/fastestvpn/updater/servers.go rename to pkg/updaters/fastestvpn/servers.go index 0401ab35..46dd3b04 100644 --- a/internal/provider/fastestvpn/updater/servers.go +++ b/pkg/updaters/fastestvpn/servers.go @@ -1,4 +1,4 @@ -package updater +package fastestvpn import ( "context" diff --git a/pkg/updaters/fastestvpn/updater.go b/pkg/updaters/fastestvpn/updater.go new file mode 100644 index 00000000..f064a134 --- /dev/null +++ b/pkg/updaters/fastestvpn/updater.go @@ -0,0 +1,27 @@ +package fastestvpn + +import ( + "net/http" + + "github.com/qdm12/gluetun/internal/provider/common" +) + +type Updater struct { + client *http.Client + parallelResolver common.ParallelResolver + warner common.Warner +} + +func New(client *http.Client, warner common.Warner, + parallelResolver common.ParallelResolver, +) *Updater { + return &Updater{ + client: client, + parallelResolver: parallelResolver, + warner: warner, + } +} + +func (u *Updater) Version() uint16 { + return 2 //nolint:mnd +} diff --git a/internal/provider/giganews/updater/filename.go b/pkg/updaters/giganews/filename.go similarity index 96% rename from internal/provider/giganews/updater/filename.go rename to pkg/updaters/giganews/filename.go index a2fd3f6e..a7990a4e 100644 --- a/internal/provider/giganews/updater/filename.go +++ b/pkg/updaters/giganews/filename.go @@ -1,4 +1,4 @@ -package updater +package giganews import ( "errors" diff --git a/internal/provider/giganews/updater/hosttoserver.go b/pkg/updaters/giganews/hosttoserver.go similarity index 98% rename from internal/provider/giganews/updater/hosttoserver.go rename to pkg/updaters/giganews/hosttoserver.go index df9e9369..e09d7852 100644 --- a/internal/provider/giganews/updater/hosttoserver.go +++ b/pkg/updaters/giganews/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package giganews import ( "net/netip" diff --git a/internal/provider/giganews/updater/resolve.go b/pkg/updaters/giganews/resolve.go similarity index 97% rename from internal/provider/giganews/updater/resolve.go rename to pkg/updaters/giganews/resolve.go index fde66d47..0d39083e 100644 --- a/internal/provider/giganews/updater/resolve.go +++ b/pkg/updaters/giganews/resolve.go @@ -1,4 +1,4 @@ -package updater +package giganews import ( "time" diff --git a/internal/provider/giganews/updater/servers.go b/pkg/updaters/giganews/servers.go similarity index 99% rename from internal/provider/giganews/updater/servers.go rename to pkg/updaters/giganews/servers.go index c75085ec..1b9463b6 100644 --- a/internal/provider/giganews/updater/servers.go +++ b/pkg/updaters/giganews/servers.go @@ -1,4 +1,4 @@ -package updater +package giganews import ( "context" diff --git a/internal/provider/ipvanish/updater/updater.go b/pkg/updaters/giganews/updater.go similarity index 86% rename from internal/provider/ipvanish/updater/updater.go rename to pkg/updaters/giganews/updater.go index c2f9d7f2..63dc25dd 100644 --- a/internal/provider/ipvanish/updater/updater.go +++ b/pkg/updaters/giganews/updater.go @@ -1,4 +1,4 @@ -package updater +package giganews import ( "github.com/qdm12/gluetun/internal/provider/common" @@ -6,8 +6,8 @@ import ( type Updater struct { unzipper common.Unzipper - warner common.Warner parallelResolver common.ParallelResolver + warner common.Warner } func New(unzipper common.Unzipper, warner common.Warner, @@ -15,7 +15,11 @@ func New(unzipper common.Unzipper, warner common.Warner, ) *Updater { return &Updater{ unzipper: unzipper, - warner: warner, parallelResolver: parallelResolver, + warner: warner, } } + +func (u *Updater) Version() uint16 { + return 1 +} diff --git a/internal/provider/hidemyass/updater/hosts.go b/pkg/updaters/hidemyass/hosts.go similarity index 95% rename from internal/provider/hidemyass/updater/hosts.go rename to pkg/updaters/hidemyass/hosts.go index 22fcbd0a..0fe2b8eb 100644 --- a/internal/provider/hidemyass/updater/hosts.go +++ b/pkg/updaters/hidemyass/hosts.go @@ -1,4 +1,4 @@ -package updater +package hidemyass func getUniqueHosts(tcpHostToURL, udpHostToURL map[string]string) ( hosts []string, diff --git a/internal/provider/hidemyass/updater/hosttourl.go b/pkg/updaters/hidemyass/hosttourl.go similarity index 98% rename from internal/provider/hidemyass/updater/hosttourl.go rename to pkg/updaters/hidemyass/hosttourl.go index 3e0c09de..821e88e2 100644 --- a/internal/provider/hidemyass/updater/hosttourl.go +++ b/pkg/updaters/hidemyass/hosttourl.go @@ -1,4 +1,4 @@ -package updater +package hidemyass import ( "context" diff --git a/internal/provider/hidemyass/updater/index.go b/pkg/updaters/hidemyass/index.go similarity index 98% rename from internal/provider/hidemyass/updater/index.go rename to pkg/updaters/hidemyass/index.go index 6829baaf..1640266c 100644 --- a/internal/provider/hidemyass/updater/index.go +++ b/pkg/updaters/hidemyass/index.go @@ -1,4 +1,4 @@ -package updater +package hidemyass import ( "context" diff --git a/internal/provider/hidemyass/updater/resolve.go b/pkg/updaters/hidemyass/resolve.go similarity index 97% rename from internal/provider/hidemyass/updater/resolve.go rename to pkg/updaters/hidemyass/resolve.go index e3f76174..2466a75b 100644 --- a/internal/provider/hidemyass/updater/resolve.go +++ b/pkg/updaters/hidemyass/resolve.go @@ -1,4 +1,4 @@ -package updater +package hidemyass import ( "time" diff --git a/internal/provider/hidemyass/updater/servers.go b/pkg/updaters/hidemyass/servers.go similarity index 98% rename from internal/provider/hidemyass/updater/servers.go rename to pkg/updaters/hidemyass/servers.go index 83a765a3..6f4ef1d5 100644 --- a/internal/provider/hidemyass/updater/servers.go +++ b/pkg/updaters/hidemyass/servers.go @@ -1,4 +1,4 @@ -package updater +package hidemyass import ( "context" diff --git a/internal/provider/fastestvpn/updater/updater.go b/pkg/updaters/hidemyass/updater.go similarity index 84% rename from internal/provider/fastestvpn/updater/updater.go rename to pkg/updaters/hidemyass/updater.go index df4427cc..5431c451 100644 --- a/internal/provider/fastestvpn/updater/updater.go +++ b/pkg/updaters/hidemyass/updater.go @@ -1,4 +1,4 @@ -package updater +package hidemyass import ( "net/http" @@ -21,3 +21,7 @@ func New(client *http.Client, warner common.Warner, warner: warner, } } + +func (u *Updater) Version() uint16 { + return 2 //nolint:mnd +} diff --git a/internal/provider/hidemyass/updater/url.go b/pkg/updaters/hidemyass/url.go similarity index 98% rename from internal/provider/hidemyass/updater/url.go rename to pkg/updaters/hidemyass/url.go index b9976c58..2a9eadad 100644 --- a/internal/provider/hidemyass/updater/url.go +++ b/pkg/updaters/hidemyass/url.go @@ -1,4 +1,4 @@ -package updater +package hidemyass import ( "strings" diff --git a/internal/provider/ipvanish/updater/filename.go b/pkg/updaters/ipvanish/filename.go similarity index 98% rename from internal/provider/ipvanish/updater/filename.go rename to pkg/updaters/ipvanish/filename.go index f95e386f..5e4859ca 100644 --- a/internal/provider/ipvanish/updater/filename.go +++ b/pkg/updaters/ipvanish/filename.go @@ -1,4 +1,4 @@ -package updater +package ipvanish import ( "errors" diff --git a/internal/provider/ipvanish/updater/filename_test.go b/pkg/updaters/ipvanish/filename_test.go similarity index 98% rename from internal/provider/ipvanish/updater/filename_test.go rename to pkg/updaters/ipvanish/filename_test.go index 50a6d702..97418de4 100644 --- a/internal/provider/ipvanish/updater/filename_test.go +++ b/pkg/updaters/ipvanish/filename_test.go @@ -1,4 +1,4 @@ -package updater +package ipvanish import ( "errors" diff --git a/internal/provider/ipvanish/updater/hosttoserver.go b/pkg/updaters/ipvanish/hosttoserver.go similarity index 98% rename from internal/provider/ipvanish/updater/hosttoserver.go rename to pkg/updaters/ipvanish/hosttoserver.go index 9295ef60..808a47f5 100644 --- a/internal/provider/ipvanish/updater/hosttoserver.go +++ b/pkg/updaters/ipvanish/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package ipvanish import ( "net/netip" diff --git a/internal/provider/ipvanish/updater/hosttoserver_test.go b/pkg/updaters/ipvanish/hosttoserver_test.go similarity index 99% rename from internal/provider/ipvanish/updater/hosttoserver_test.go rename to pkg/updaters/ipvanish/hosttoserver_test.go index 41d384cf..91888b10 100644 --- a/internal/provider/ipvanish/updater/hosttoserver_test.go +++ b/pkg/updaters/ipvanish/hosttoserver_test.go @@ -1,4 +1,4 @@ -package updater +package ipvanish import ( "net/netip" diff --git a/internal/provider/slickvpn/updater/resolve.go b/pkg/updaters/ipvanish/resolve.go similarity index 97% rename from internal/provider/slickvpn/updater/resolve.go rename to pkg/updaters/ipvanish/resolve.go index d0b3fa0c..06a2dc69 100644 --- a/internal/provider/slickvpn/updater/resolve.go +++ b/pkg/updaters/ipvanish/resolve.go @@ -1,4 +1,4 @@ -package updater +package ipvanish import ( "time" diff --git a/internal/provider/ipvanish/updater/servers.go b/pkg/updaters/ipvanish/servers.go similarity index 99% rename from internal/provider/ipvanish/updater/servers.go rename to pkg/updaters/ipvanish/servers.go index fa0d29c8..024452cc 100644 --- a/internal/provider/ipvanish/updater/servers.go +++ b/pkg/updaters/ipvanish/servers.go @@ -1,4 +1,4 @@ -package updater +package ipvanish import ( "context" diff --git a/internal/provider/ipvanish/updater/servers_test.go b/pkg/updaters/ipvanish/servers_test.go similarity index 99% rename from internal/provider/ipvanish/updater/servers_test.go rename to pkg/updaters/ipvanish/servers_test.go index d416a5fe..1ded4218 100644 --- a/internal/provider/ipvanish/updater/servers_test.go +++ b/pkg/updaters/ipvanish/servers_test.go @@ -1,4 +1,4 @@ -package updater +package ipvanish import ( "context" diff --git a/internal/provider/privatevpn/updater/updater.go b/pkg/updaters/ipvanish/updater.go similarity index 84% rename from internal/provider/privatevpn/updater/updater.go rename to pkg/updaters/ipvanish/updater.go index d61e235d..1a4774b9 100644 --- a/internal/provider/privatevpn/updater/updater.go +++ b/pkg/updaters/ipvanish/updater.go @@ -1,4 +1,4 @@ -package updater +package ipvanish import ( "github.com/qdm12/gluetun/internal/provider/common" @@ -6,8 +6,8 @@ import ( type Updater struct { unzipper common.Unzipper - parallelResolver common.ParallelResolver warner common.Warner + parallelResolver common.ParallelResolver } func New(unzipper common.Unzipper, warner common.Warner, @@ -15,7 +15,11 @@ func New(unzipper common.Unzipper, warner common.Warner, ) *Updater { return &Updater{ unzipper: unzipper, - parallelResolver: parallelResolver, warner: warner, + parallelResolver: parallelResolver, } } + +func (u *Updater) Version() uint16 { + return 2 //nolint:mnd +} diff --git a/internal/provider/ivpn/updater/api.go b/pkg/updaters/ivpn/api.go similarity index 98% rename from internal/provider/ivpn/updater/api.go rename to pkg/updaters/ivpn/api.go index 54d8d5d9..f7fecb43 100644 --- a/internal/provider/ivpn/updater/api.go +++ b/pkg/updaters/ivpn/api.go @@ -1,4 +1,4 @@ -package updater +package ivpn import ( "context" diff --git a/internal/provider/ivpn/updater/api_test.go b/pkg/updaters/ivpn/api_test.go similarity index 99% rename from internal/provider/ivpn/updater/api_test.go rename to pkg/updaters/ivpn/api_test.go index 9472e2a9..58774e48 100644 --- a/internal/provider/ivpn/updater/api_test.go +++ b/pkg/updaters/ivpn/api_test.go @@ -1,4 +1,4 @@ -package updater +package ivpn import ( "context" diff --git a/internal/provider/ipvanish/updater/resolve.go b/pkg/updaters/ivpn/resolve.go similarity index 97% rename from internal/provider/ipvanish/updater/resolve.go rename to pkg/updaters/ivpn/resolve.go index d0b3fa0c..eb121ae0 100644 --- a/internal/provider/ipvanish/updater/resolve.go +++ b/pkg/updaters/ivpn/resolve.go @@ -1,4 +1,4 @@ -package updater +package ivpn import ( "time" diff --git a/internal/provider/surfshark/updater/roundtrip_test.go b/pkg/updaters/ivpn/roundtrip_test.go similarity index 91% rename from internal/provider/surfshark/updater/roundtrip_test.go rename to pkg/updaters/ivpn/roundtrip_test.go index 9df23788..f8ee5d95 100644 --- a/internal/provider/surfshark/updater/roundtrip_test.go +++ b/pkg/updaters/ivpn/roundtrip_test.go @@ -1,4 +1,4 @@ -package updater +package ivpn import "net/http" diff --git a/internal/provider/ivpn/updater/servers.go b/pkg/updaters/ivpn/servers.go similarity index 99% rename from internal/provider/ivpn/updater/servers.go rename to pkg/updaters/ivpn/servers.go index 33c2abe9..7c876839 100644 --- a/internal/provider/ivpn/updater/servers.go +++ b/pkg/updaters/ivpn/servers.go @@ -1,4 +1,4 @@ -package updater +package ivpn import ( "context" diff --git a/internal/provider/ivpn/updater/servers_test.go b/pkg/updaters/ivpn/servers_test.go similarity index 99% rename from internal/provider/ivpn/updater/servers_test.go rename to pkg/updaters/ivpn/servers_test.go index 68a709e3..7dd58963 100644 --- a/internal/provider/ivpn/updater/servers_test.go +++ b/pkg/updaters/ivpn/servers_test.go @@ -1,4 +1,4 @@ -package updater +package ivpn import ( "context" diff --git a/internal/provider/slickvpn/updater/updater.go b/pkg/updaters/ivpn/updater.go similarity index 85% rename from internal/provider/slickvpn/updater/updater.go rename to pkg/updaters/ivpn/updater.go index df4427cc..25cc39e4 100644 --- a/internal/provider/slickvpn/updater/updater.go +++ b/pkg/updaters/ivpn/updater.go @@ -1,4 +1,4 @@ -package updater +package ivpn import ( "net/http" @@ -21,3 +21,7 @@ func New(client *http.Client, warner common.Warner, warner: warner, } } + +func (u *Updater) Version() uint16 { + return 3 //nolint:mnd +} diff --git a/internal/provider/mullvad/updater/api.go b/pkg/updaters/mullvad/api.go similarity index 98% rename from internal/provider/mullvad/updater/api.go rename to pkg/updaters/mullvad/api.go index a8631c26..e54aa2a6 100644 --- a/internal/provider/mullvad/updater/api.go +++ b/pkg/updaters/mullvad/api.go @@ -1,4 +1,4 @@ -package updater +package mullvad import ( "context" diff --git a/internal/provider/mullvad/updater/hosttoserver.go b/pkg/updaters/mullvad/hosttoserver.go similarity index 99% rename from internal/provider/mullvad/updater/hosttoserver.go rename to pkg/updaters/mullvad/hosttoserver.go index 33e98f20..cb4be070 100644 --- a/internal/provider/mullvad/updater/hosttoserver.go +++ b/pkg/updaters/mullvad/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package mullvad import ( "errors" diff --git a/internal/provider/mullvad/updater/ips.go b/pkg/updaters/mullvad/ips.go similarity index 97% rename from internal/provider/mullvad/updater/ips.go rename to pkg/updaters/mullvad/ips.go index 14fb730e..ebc4d7a7 100644 --- a/internal/provider/mullvad/updater/ips.go +++ b/pkg/updaters/mullvad/ips.go @@ -1,4 +1,4 @@ -package updater +package mullvad import ( "net/netip" diff --git a/internal/provider/mullvad/updater/ips_test.go b/pkg/updaters/mullvad/ips_test.go similarity index 98% rename from internal/provider/mullvad/updater/ips_test.go rename to pkg/updaters/mullvad/ips_test.go index 3b06bb47..5d327d5e 100644 --- a/internal/provider/mullvad/updater/ips_test.go +++ b/pkg/updaters/mullvad/ips_test.go @@ -1,4 +1,4 @@ -package updater +package mullvad import ( "net/netip" diff --git a/internal/provider/mullvad/updater/servers.go b/pkg/updaters/mullvad/servers.go similarity index 97% rename from internal/provider/mullvad/updater/servers.go rename to pkg/updaters/mullvad/servers.go index b6587b10..f59524a9 100644 --- a/internal/provider/mullvad/updater/servers.go +++ b/pkg/updaters/mullvad/servers.go @@ -1,4 +1,4 @@ -package updater +package mullvad import ( "context" diff --git a/internal/provider/privateinternetaccess/updater/updater.go b/pkg/updaters/mullvad/updater.go similarity index 65% rename from internal/provider/privateinternetaccess/updater/updater.go rename to pkg/updaters/mullvad/updater.go index a987c0fd..446bc8e2 100644 --- a/internal/provider/privateinternetaccess/updater/updater.go +++ b/pkg/updaters/mullvad/updater.go @@ -1,4 +1,4 @@ -package updater +package mullvad import ( "net/http" @@ -13,3 +13,7 @@ func New(client *http.Client) *Updater { client: client, } } + +func (u *Updater) Version() uint16 { + return 4 //nolint:mnd +} diff --git a/internal/provider/nordvpn/updater/api.go b/pkg/updaters/nordvpn/api.go similarity index 98% rename from internal/provider/nordvpn/updater/api.go rename to pkg/updaters/nordvpn/api.go index 3d122a8e..61136c14 100644 --- a/internal/provider/nordvpn/updater/api.go +++ b/pkg/updaters/nordvpn/api.go @@ -1,4 +1,4 @@ -package updater +package nordvpn import ( "context" diff --git a/internal/provider/nordvpn/updater/models.go b/pkg/updaters/nordvpn/models.go similarity index 99% rename from internal/provider/nordvpn/updater/models.go rename to pkg/updaters/nordvpn/models.go index ea2296b2..75c357ca 100644 --- a/internal/provider/nordvpn/updater/models.go +++ b/pkg/updaters/nordvpn/models.go @@ -1,4 +1,4 @@ -package updater +package nordvpn import ( "encoding/base64" diff --git a/internal/provider/nordvpn/updater/name.go b/pkg/updaters/nordvpn/name.go similarity index 97% rename from internal/provider/nordvpn/updater/name.go rename to pkg/updaters/nordvpn/name.go index cf51eb26..1fbd1518 100644 --- a/internal/provider/nordvpn/updater/name.go +++ b/pkg/updaters/nordvpn/name.go @@ -1,4 +1,4 @@ -package updater +package nordvpn import ( "errors" diff --git a/internal/provider/nordvpn/updater/servers.go b/pkg/updaters/nordvpn/servers.go similarity index 99% rename from internal/provider/nordvpn/updater/servers.go rename to pkg/updaters/nordvpn/servers.go index d939700b..19ccecf5 100644 --- a/internal/provider/nordvpn/updater/servers.go +++ b/pkg/updaters/nordvpn/servers.go @@ -1,4 +1,4 @@ -package updater +package nordvpn import ( "context" diff --git a/internal/provider/nordvpn/updater/updater.go b/pkg/updaters/nordvpn/updater.go similarity index 77% rename from internal/provider/nordvpn/updater/updater.go rename to pkg/updaters/nordvpn/updater.go index ff0d41cd..c248413d 100644 --- a/internal/provider/nordvpn/updater/updater.go +++ b/pkg/updaters/nordvpn/updater.go @@ -1,4 +1,4 @@ -package updater +package nordvpn import ( "net/http" @@ -17,3 +17,7 @@ func New(client *http.Client, warner common.Warner) *Updater { warner: warner, } } + +func (u *Updater) Version() uint16 { + return 5 //nolint:mnd +} diff --git a/internal/provider/perfectprivacy/updater/citytoserver.go b/pkg/updaters/perfectprivacy/citytoserver.go similarity index 97% rename from internal/provider/perfectprivacy/updater/citytoserver.go rename to pkg/updaters/perfectprivacy/citytoserver.go index 39b2c8f1..ff8bbb87 100644 --- a/internal/provider/perfectprivacy/updater/citytoserver.go +++ b/pkg/updaters/perfectprivacy/citytoserver.go @@ -1,4 +1,4 @@ -package updater +package perfectprivacy import ( "net/netip" diff --git a/internal/provider/perfectprivacy/updater/filename.go b/pkg/updaters/perfectprivacy/filename.go similarity index 91% rename from internal/provider/perfectprivacy/updater/filename.go rename to pkg/updaters/perfectprivacy/filename.go index 6b379392..7378ac9d 100644 --- a/internal/provider/perfectprivacy/updater/filename.go +++ b/pkg/updaters/perfectprivacy/filename.go @@ -1,4 +1,4 @@ -package updater +package perfectprivacy import ( "strings" diff --git a/internal/provider/perfectprivacy/updater/servers.go b/pkg/updaters/perfectprivacy/servers.go similarity index 98% rename from internal/provider/perfectprivacy/updater/servers.go rename to pkg/updaters/perfectprivacy/servers.go index ea79e54c..effd2e1c 100644 --- a/internal/provider/perfectprivacy/updater/servers.go +++ b/pkg/updaters/perfectprivacy/servers.go @@ -1,4 +1,4 @@ -package updater +package perfectprivacy import ( "context" diff --git a/internal/provider/perfectprivacy/updater/updater.go b/pkg/updaters/perfectprivacy/updater.go similarity index 78% rename from internal/provider/perfectprivacy/updater/updater.go rename to pkg/updaters/perfectprivacy/updater.go index 66a2b327..e92a4e7e 100644 --- a/internal/provider/perfectprivacy/updater/updater.go +++ b/pkg/updaters/perfectprivacy/updater.go @@ -1,4 +1,4 @@ -package updater +package perfectprivacy import ( "github.com/qdm12/gluetun/internal/provider/common" @@ -15,3 +15,7 @@ func New(unzipper common.Unzipper, warner common.Warner) *Updater { warner: warner, } } + +func (u *Updater) Version() uint16 { + return 1 +} diff --git a/internal/provider/privado/updater/servers.go b/pkg/updaters/privado/servers.go similarity index 99% rename from internal/provider/privado/updater/servers.go rename to pkg/updaters/privado/servers.go index ee3742d6..cb736c93 100644 --- a/internal/provider/privado/updater/servers.go +++ b/pkg/updaters/privado/servers.go @@ -1,4 +1,4 @@ -package updater +package privado import ( "context" diff --git a/internal/provider/privado/updater/updater.go b/pkg/updaters/privado/updater.go similarity index 77% rename from internal/provider/privado/updater/updater.go rename to pkg/updaters/privado/updater.go index ff0d41cd..03b083d3 100644 --- a/internal/provider/privado/updater/updater.go +++ b/pkg/updaters/privado/updater.go @@ -1,4 +1,4 @@ -package updater +package privado import ( "net/http" @@ -17,3 +17,7 @@ func New(client *http.Client, warner common.Warner) *Updater { warner: warner, } } + +func (u *Updater) Version() uint16 { + return 6 //nolint:mnd +} diff --git a/internal/provider/privateinternetaccess/updater/api.go b/pkg/updaters/privateinternetaccess/api.go similarity index 97% rename from internal/provider/privateinternetaccess/updater/api.go rename to pkg/updaters/privateinternetaccess/api.go index 672bb7eb..b497e63c 100644 --- a/internal/provider/privateinternetaccess/updater/api.go +++ b/pkg/updaters/privateinternetaccess/api.go @@ -1,4 +1,4 @@ -package updater +package privateinternetaccess import ( "bytes" diff --git a/internal/provider/privateinternetaccess/updater/hosttoserver.go b/pkg/updaters/privateinternetaccess/hosttoserver.go similarity index 97% rename from internal/provider/privateinternetaccess/updater/hosttoserver.go rename to pkg/updaters/privateinternetaccess/hosttoserver.go index 93464106..8acfa051 100644 --- a/internal/provider/privateinternetaccess/updater/hosttoserver.go +++ b/pkg/updaters/privateinternetaccess/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package privateinternetaccess import ( "net/netip" diff --git a/internal/provider/privateinternetaccess/updater/servers.go b/pkg/updaters/privateinternetaccess/servers.go similarity index 98% rename from internal/provider/privateinternetaccess/updater/servers.go rename to pkg/updaters/privateinternetaccess/servers.go index c2b81304..140277ff 100644 --- a/internal/provider/privateinternetaccess/updater/servers.go +++ b/pkg/updaters/privateinternetaccess/servers.go @@ -1,4 +1,4 @@ -package updater +package privateinternetaccess import ( "context" diff --git a/internal/provider/airvpn/updater/updater.go b/pkg/updaters/privateinternetaccess/updater.go similarity index 65% rename from internal/provider/airvpn/updater/updater.go rename to pkg/updaters/privateinternetaccess/updater.go index a987c0fd..e7a77c17 100644 --- a/internal/provider/airvpn/updater/updater.go +++ b/pkg/updaters/privateinternetaccess/updater.go @@ -1,4 +1,4 @@ -package updater +package privateinternetaccess import ( "net/http" @@ -13,3 +13,7 @@ func New(client *http.Client) *Updater { client: client, } } + +func (u *Updater) Version() uint16 { + return 1 +} diff --git a/internal/provider/protonvpn/updater/countries.go b/pkg/updaters/privatevpn/countries.go similarity index 94% rename from internal/provider/protonvpn/updater/countries.go rename to pkg/updaters/privatevpn/countries.go index 6ea6f107..2faa3743 100644 --- a/internal/provider/protonvpn/updater/countries.go +++ b/pkg/updaters/privatevpn/countries.go @@ -1,4 +1,4 @@ -package updater +package privatevpn import "strings" diff --git a/internal/provider/privatevpn/updater/filename.go b/pkg/updaters/privatevpn/filename.go similarity index 98% rename from internal/provider/privatevpn/updater/filename.go rename to pkg/updaters/privatevpn/filename.go index 50d58de9..a4c5170f 100644 --- a/internal/provider/privatevpn/updater/filename.go +++ b/pkg/updaters/privatevpn/filename.go @@ -1,4 +1,4 @@ -package updater +package privatevpn import ( "errors" diff --git a/internal/provider/privatevpn/updater/hosttoserver.go b/pkg/updaters/privatevpn/hosttoserver.go similarity index 98% rename from internal/provider/privatevpn/updater/hosttoserver.go rename to pkg/updaters/privatevpn/hosttoserver.go index bd015721..a68e0262 100644 --- a/internal/provider/privatevpn/updater/hosttoserver.go +++ b/pkg/updaters/privatevpn/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package privatevpn import ( "net/netip" diff --git a/internal/provider/privatevpn/updater/resolve.go b/pkg/updaters/privatevpn/resolve.go similarity index 96% rename from internal/provider/privatevpn/updater/resolve.go rename to pkg/updaters/privatevpn/resolve.go index e01ff836..9d49835e 100644 --- a/internal/provider/privatevpn/updater/resolve.go +++ b/pkg/updaters/privatevpn/resolve.go @@ -1,4 +1,4 @@ -package updater +package privatevpn import ( "time" diff --git a/internal/provider/privatevpn/updater/servers.go b/pkg/updaters/privatevpn/servers.go similarity index 99% rename from internal/provider/privatevpn/updater/servers.go rename to pkg/updaters/privatevpn/servers.go index 5976def4..90b60eaa 100644 --- a/internal/provider/privatevpn/updater/servers.go +++ b/pkg/updaters/privatevpn/servers.go @@ -1,4 +1,4 @@ -package updater +package privatevpn import ( "context" diff --git a/pkg/updaters/privatevpn/updater.go b/pkg/updaters/privatevpn/updater.go new file mode 100644 index 00000000..981f23bd --- /dev/null +++ b/pkg/updaters/privatevpn/updater.go @@ -0,0 +1,25 @@ +package privatevpn + +import ( + "github.com/qdm12/gluetun/internal/provider/common" +) + +type Updater struct { + unzipper common.Unzipper + parallelResolver common.ParallelResolver + warner common.Warner +} + +func New(unzipper common.Unzipper, warner common.Warner, + parallelResolver common.ParallelResolver, +) *Updater { + return &Updater{ + unzipper: unzipper, + parallelResolver: parallelResolver, + warner: warner, + } +} + +func (u *Updater) Version() uint16 { + return 4 //nolint:mnd +} diff --git a/internal/provider/protonvpn/updater/api.go b/pkg/updaters/protonvpn/api.go similarity index 99% rename from internal/provider/protonvpn/updater/api.go rename to pkg/updaters/protonvpn/api.go index fb8c3016..cdcdcb5f 100644 --- a/internal/provider/protonvpn/updater/api.go +++ b/pkg/updaters/protonvpn/api.go @@ -1,4 +1,4 @@ -package updater +package protonvpn import ( "bytes" diff --git a/internal/provider/privatevpn/updater/countries.go b/pkg/updaters/protonvpn/countries.go similarity index 94% rename from internal/provider/privatevpn/updater/countries.go rename to pkg/updaters/protonvpn/countries.go index 6ea6f107..6cce5bea 100644 --- a/internal/provider/privatevpn/updater/countries.go +++ b/pkg/updaters/protonvpn/countries.go @@ -1,4 +1,4 @@ -package updater +package protonvpn import "strings" diff --git a/internal/provider/protonvpn/updater/iptoserver.go b/pkg/updaters/protonvpn/iptoserver.go similarity index 98% rename from internal/provider/protonvpn/updater/iptoserver.go rename to pkg/updaters/protonvpn/iptoserver.go index 973cc5e6..1a272463 100644 --- a/internal/provider/protonvpn/updater/iptoserver.go +++ b/pkg/updaters/protonvpn/iptoserver.go @@ -1,4 +1,4 @@ -package updater +package protonvpn import ( "net/netip" diff --git a/internal/provider/protonvpn/updater/servers.go b/pkg/updaters/protonvpn/servers.go similarity index 99% rename from internal/provider/protonvpn/updater/servers.go rename to pkg/updaters/protonvpn/servers.go index ff919937..776cc9f6 100644 --- a/internal/provider/protonvpn/updater/servers.go +++ b/pkg/updaters/protonvpn/servers.go @@ -1,4 +1,4 @@ -package updater +package protonvpn import ( "context" diff --git a/internal/provider/protonvpn/updater/updater.go b/pkg/updaters/protonvpn/updater.go similarity index 82% rename from internal/provider/protonvpn/updater/updater.go rename to pkg/updaters/protonvpn/updater.go index bc62a778..d35369d2 100644 --- a/internal/provider/protonvpn/updater/updater.go +++ b/pkg/updaters/protonvpn/updater.go @@ -1,4 +1,4 @@ -package updater +package protonvpn import ( "net/http" @@ -21,3 +21,7 @@ func New(client *http.Client, warner common.Warner, email, password string) *Upd warner: warner, } } + +func (u *Updater) Version() uint16 { + return 4 //nolint:mnd +} diff --git a/internal/provider/protonvpn/updater/version.go b/pkg/updaters/protonvpn/version.go similarity index 99% rename from internal/provider/protonvpn/updater/version.go rename to pkg/updaters/protonvpn/version.go index bdf0587f..4fc6c7db 100644 --- a/internal/provider/protonvpn/updater/version.go +++ b/pkg/updaters/protonvpn/version.go @@ -1,4 +1,4 @@ -package updater +package protonvpn import ( "context" diff --git a/internal/provider/purevpn/updater/compare.go b/pkg/updaters/purevpn/compare.go similarity index 98% rename from internal/provider/purevpn/updater/compare.go rename to pkg/updaters/purevpn/compare.go index 05914526..b44ec966 100644 --- a/internal/provider/purevpn/updater/compare.go +++ b/pkg/updaters/purevpn/compare.go @@ -1,4 +1,4 @@ -package updater +package purevpn import ( "strings" diff --git a/internal/provider/purevpn/updater/compare_test.go b/pkg/updaters/purevpn/compare_test.go similarity index 98% rename from internal/provider/purevpn/updater/compare_test.go rename to pkg/updaters/purevpn/compare_test.go index 8b889dec..c218dc20 100644 --- a/internal/provider/purevpn/updater/compare_test.go +++ b/pkg/updaters/purevpn/compare_test.go @@ -1,4 +1,4 @@ -package updater +package purevpn import ( "testing" diff --git a/internal/provider/purevpn/updater/hosttoserver.go b/pkg/updaters/purevpn/hosttoserver.go similarity index 98% rename from internal/provider/purevpn/updater/hosttoserver.go rename to pkg/updaters/purevpn/hosttoserver.go index 3b6af538..dd74b520 100644 --- a/internal/provider/purevpn/updater/hosttoserver.go +++ b/pkg/updaters/purevpn/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package purevpn import ( "net/netip" diff --git a/internal/provider/purevpn/updater/parse.go b/pkg/updaters/purevpn/parse.go similarity index 99% rename from internal/provider/purevpn/updater/parse.go rename to pkg/updaters/purevpn/parse.go index 5e54ed75..9f1b13bf 100644 --- a/internal/provider/purevpn/updater/parse.go +++ b/pkg/updaters/purevpn/parse.go @@ -1,4 +1,4 @@ -package updater +package purevpn import ( "fmt" diff --git a/internal/provider/purevpn/updater/resolve.go b/pkg/updaters/purevpn/resolve.go similarity index 97% rename from internal/provider/purevpn/updater/resolve.go rename to pkg/updaters/purevpn/resolve.go index d0b3fa0c..da22ceec 100644 --- a/internal/provider/purevpn/updater/resolve.go +++ b/pkg/updaters/purevpn/resolve.go @@ -1,4 +1,4 @@ -package updater +package purevpn import ( "time" diff --git a/internal/provider/purevpn/updater/servers.go b/pkg/updaters/purevpn/servers.go similarity index 99% rename from internal/provider/purevpn/updater/servers.go rename to pkg/updaters/purevpn/servers.go index 3d40ec83..266840bb 100644 --- a/internal/provider/purevpn/updater/servers.go +++ b/pkg/updaters/purevpn/servers.go @@ -1,4 +1,4 @@ -package updater +package purevpn import ( "context" diff --git a/internal/provider/purevpn/updater/updater.go b/pkg/updaters/purevpn/updater.go similarity index 86% rename from internal/provider/purevpn/updater/updater.go rename to pkg/updaters/purevpn/updater.go index 2136f8ee..b1a48cc8 100644 --- a/internal/provider/purevpn/updater/updater.go +++ b/pkg/updaters/purevpn/updater.go @@ -1,4 +1,4 @@ -package updater +package purevpn import ( "github.com/qdm12/gluetun/internal/provider/common" @@ -21,3 +21,7 @@ func New(ipFetcher common.IPFetcher, unzipper common.Unzipper, warner: warner, } } + +func (u *Updater) Version() uint16 { + return 3 //nolint:mnd +} diff --git a/internal/provider/ivpn/updater/resolve.go b/pkg/updaters/slickvpn/resolve.go similarity index 97% rename from internal/provider/ivpn/updater/resolve.go rename to pkg/updaters/slickvpn/resolve.go index d0b3fa0c..c93652d8 100644 --- a/internal/provider/ivpn/updater/resolve.go +++ b/pkg/updaters/slickvpn/resolve.go @@ -1,4 +1,4 @@ -package updater +package slickvpn import ( "time" diff --git a/internal/provider/slickvpn/updater/servers.go b/pkg/updaters/slickvpn/servers.go similarity index 99% rename from internal/provider/slickvpn/updater/servers.go rename to pkg/updaters/slickvpn/servers.go index 5a00d6b8..bc92865c 100644 --- a/internal/provider/slickvpn/updater/servers.go +++ b/pkg/updaters/slickvpn/servers.go @@ -1,4 +1,4 @@ -package updater +package slickvpn import ( "context" diff --git a/internal/provider/hidemyass/updater/updater.go b/pkg/updaters/slickvpn/updater.go similarity index 86% rename from internal/provider/hidemyass/updater/updater.go rename to pkg/updaters/slickvpn/updater.go index df4427cc..65ed6f17 100644 --- a/internal/provider/hidemyass/updater/updater.go +++ b/pkg/updaters/slickvpn/updater.go @@ -1,4 +1,4 @@ -package updater +package slickvpn import ( "net/http" @@ -21,3 +21,7 @@ func New(client *http.Client, warner common.Warner, warner: warner, } } + +func (u *Updater) Version() uint16 { + return 1 +} diff --git a/internal/provider/surfshark/updater/api.go b/pkg/updaters/surfshark/api.go similarity index 99% rename from internal/provider/surfshark/updater/api.go rename to pkg/updaters/surfshark/api.go index 2b5aab09..5b278694 100644 --- a/internal/provider/surfshark/updater/api.go +++ b/pkg/updaters/surfshark/api.go @@ -1,4 +1,4 @@ -package updater +package surfshark import ( "context" diff --git a/internal/provider/surfshark/updater/api_test.go b/pkg/updaters/surfshark/api_test.go similarity index 99% rename from internal/provider/surfshark/updater/api_test.go rename to pkg/updaters/surfshark/api_test.go index 1d3ed986..22aed1ef 100644 --- a/internal/provider/surfshark/updater/api_test.go +++ b/pkg/updaters/surfshark/api_test.go @@ -1,4 +1,4 @@ -package updater +package surfshark import ( "context" diff --git a/internal/provider/surfshark/updater/hosttoserver.go b/pkg/updaters/surfshark/hosttoserver.go similarity index 99% rename from internal/provider/surfshark/updater/hosttoserver.go rename to pkg/updaters/surfshark/hosttoserver.go index c70a3b0a..cfecd3da 100644 --- a/internal/provider/surfshark/updater/hosttoserver.go +++ b/pkg/updaters/surfshark/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package surfshark import ( "net/netip" diff --git a/internal/provider/surfshark/updater/location.go b/pkg/updaters/surfshark/location.go similarity index 97% rename from internal/provider/surfshark/updater/location.go rename to pkg/updaters/surfshark/location.go index 5ecadc40..e9d73aef 100644 --- a/internal/provider/surfshark/updater/location.go +++ b/pkg/updaters/surfshark/location.go @@ -1,4 +1,4 @@ -package updater +package surfshark import ( "errors" diff --git a/internal/provider/surfshark/updater/remaining.go b/pkg/updaters/surfshark/remaining.go similarity index 97% rename from internal/provider/surfshark/updater/remaining.go rename to pkg/updaters/surfshark/remaining.go index 56c19138..27f2daa3 100644 --- a/internal/provider/surfshark/updater/remaining.go +++ b/pkg/updaters/surfshark/remaining.go @@ -1,4 +1,4 @@ -package updater +package surfshark import ( "github.com/qdm12/gluetun/internal/provider/surfshark/servers" diff --git a/pkg/updaters/surfshark/resolve.go b/pkg/updaters/surfshark/resolve.go new file mode 100644 index 00000000..f7ea040d --- /dev/null +++ b/pkg/updaters/surfshark/resolve.go @@ -0,0 +1,28 @@ +package surfshark + +import ( + "time" + + "github.com/qdm12/gluetun/internal/updater/resolver" +) + +func parallelResolverSettings(hosts []string) (settings resolver.ParallelSettings) { + const ( + maxFailRatio = 0.1 + maxDuration = 20 * time.Second + betweenDuration = time.Second + maxNoNew = 2 + maxFails = 2 + ) + return resolver.ParallelSettings{ + Hosts: hosts, + MaxFailRatio: maxFailRatio, + Repeat: resolver.RepeatSettings{ + MaxDuration: maxDuration, + BetweenDuration: betweenDuration, + MaxNoNew: maxNoNew, + MaxFails: maxFails, + SortIPs: true, + }, + } +} diff --git a/internal/provider/ivpn/updater/roundtrip_test.go b/pkg/updaters/surfshark/roundtrip_test.go similarity index 90% rename from internal/provider/ivpn/updater/roundtrip_test.go rename to pkg/updaters/surfshark/roundtrip_test.go index 9df23788..d8d58399 100644 --- a/internal/provider/ivpn/updater/roundtrip_test.go +++ b/pkg/updaters/surfshark/roundtrip_test.go @@ -1,4 +1,4 @@ -package updater +package surfshark import "net/http" diff --git a/internal/provider/surfshark/updater/servers.go b/pkg/updaters/surfshark/servers.go similarity index 98% rename from internal/provider/surfshark/updater/servers.go rename to pkg/updaters/surfshark/servers.go index 1eb9d461..67562191 100644 --- a/internal/provider/surfshark/updater/servers.go +++ b/pkg/updaters/surfshark/servers.go @@ -1,4 +1,4 @@ -package updater +package surfshark import ( "context" diff --git a/internal/provider/surfshark/updater/updater.go b/pkg/updaters/surfshark/updater.go similarity index 86% rename from internal/provider/surfshark/updater/updater.go rename to pkg/updaters/surfshark/updater.go index e9b95c54..30f3a649 100644 --- a/internal/provider/surfshark/updater/updater.go +++ b/pkg/updaters/surfshark/updater.go @@ -1,4 +1,4 @@ -package updater +package surfshark import ( "net/http" @@ -23,3 +23,7 @@ func New(client *http.Client, unzipper common.Unzipper, warner: warner, } } + +func (u *Updater) Version() uint16 { + return 4 //nolint:mnd +} diff --git a/internal/provider/surfshark/updater/zip.go b/pkg/updaters/surfshark/zip.go similarity index 99% rename from internal/provider/surfshark/updater/zip.go rename to pkg/updaters/surfshark/zip.go index 92dabf55..a331bfc5 100644 --- a/internal/provider/surfshark/updater/zip.go +++ b/pkg/updaters/surfshark/zip.go @@ -1,4 +1,4 @@ -package updater +package surfshark import ( "context" diff --git a/internal/provider/torguard/updater/filename.go b/pkg/updaters/torguard/filename.go similarity index 97% rename from internal/provider/torguard/updater/filename.go rename to pkg/updaters/torguard/filename.go index a4a1d8ea..39b5b912 100644 --- a/internal/provider/torguard/updater/filename.go +++ b/pkg/updaters/torguard/filename.go @@ -1,4 +1,4 @@ -package updater +package torguard import ( "strings" diff --git a/internal/provider/torguard/updater/hosttoserver.go b/pkg/updaters/torguard/hosttoserver.go similarity index 98% rename from internal/provider/torguard/updater/hosttoserver.go rename to pkg/updaters/torguard/hosttoserver.go index 5edecf74..a211767c 100644 --- a/internal/provider/torguard/updater/hosttoserver.go +++ b/pkg/updaters/torguard/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package torguard import ( "net/netip" diff --git a/pkg/updaters/torguard/resolve.go b/pkg/updaters/torguard/resolve.go new file mode 100644 index 00000000..5eaca6bb --- /dev/null +++ b/pkg/updaters/torguard/resolve.go @@ -0,0 +1,28 @@ +package torguard + +import ( + "time" + + "github.com/qdm12/gluetun/internal/updater/resolver" +) + +func parallelResolverSettings(hosts []string) (settings resolver.ParallelSettings) { + const ( + maxFailRatio = 0.1 + maxDuration = 20 * time.Second + betweenDuration = time.Second + maxNoNew = 2 + maxFails = 2 + ) + return resolver.ParallelSettings{ + Hosts: hosts, + MaxFailRatio: maxFailRatio, + Repeat: resolver.RepeatSettings{ + MaxDuration: maxDuration, + BetweenDuration: betweenDuration, + MaxNoNew: maxNoNew, + MaxFails: maxFails, + SortIPs: true, + }, + } +} diff --git a/internal/provider/torguard/updater/servers.go b/pkg/updaters/torguard/servers.go similarity index 99% rename from internal/provider/torguard/updater/servers.go rename to pkg/updaters/torguard/servers.go index 6974c5b0..69453014 100644 --- a/internal/provider/torguard/updater/servers.go +++ b/pkg/updaters/torguard/servers.go @@ -1,4 +1,4 @@ -package updater +package torguard import ( "context" diff --git a/pkg/updaters/torguard/updater.go b/pkg/updaters/torguard/updater.go new file mode 100644 index 00000000..9360dc83 --- /dev/null +++ b/pkg/updaters/torguard/updater.go @@ -0,0 +1,25 @@ +package torguard + +import ( + "github.com/qdm12/gluetun/internal/provider/common" +) + +type Updater struct { + unzipper common.Unzipper + parallelResolver common.ParallelResolver + warner common.Warner +} + +func New(unzipper common.Unzipper, warner common.Warner, + parallelResolver common.ParallelResolver, +) *Updater { + return &Updater{ + unzipper: unzipper, + parallelResolver: parallelResolver, + warner: warner, + } +} + +func (u *Updater) Version() uint16 { + return 3 //nolint:mnd +} diff --git a/pkg/updaters/updateall.go b/pkg/updaters/updateall.go new file mode 100644 index 00000000..d0e7b87e --- /dev/null +++ b/pkg/updaters/updateall.go @@ -0,0 +1,258 @@ +package updaters + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "net/http" + "os" + "path/filepath" + "slices" + "strings" + "time" + + "github.com/qdm12/dns/v2/pkg/doh" + dnsprovider "github.com/qdm12/dns/v2/pkg/provider" + "github.com/qdm12/gluetun/internal/constants/providers" + "github.com/qdm12/gluetun/internal/models" + "github.com/qdm12/gluetun/internal/provider/common" + publicipapi "github.com/qdm12/gluetun/internal/publicip/api" + "github.com/qdm12/gluetun/internal/updater/resolver" + "github.com/qdm12/gluetun/internal/updater/unzip" + "github.com/qdm12/gluetun/pkg/updaters/airvpn" + "github.com/qdm12/gluetun/pkg/updaters/cyberghost" + "github.com/qdm12/gluetun/pkg/updaters/expressvpn" + "github.com/qdm12/gluetun/pkg/updaters/fastestvpn" + "github.com/qdm12/gluetun/pkg/updaters/giganews" + "github.com/qdm12/gluetun/pkg/updaters/hidemyass" + "github.com/qdm12/gluetun/pkg/updaters/ipvanish" + "github.com/qdm12/gluetun/pkg/updaters/ivpn" + "github.com/qdm12/gluetun/pkg/updaters/mullvad" + "github.com/qdm12/gluetun/pkg/updaters/nordvpn" + "github.com/qdm12/gluetun/pkg/updaters/perfectprivacy" + "github.com/qdm12/gluetun/pkg/updaters/privado" + "github.com/qdm12/gluetun/pkg/updaters/privateinternetaccess" + "github.com/qdm12/gluetun/pkg/updaters/privatevpn" + "github.com/qdm12/gluetun/pkg/updaters/protonvpn" + "github.com/qdm12/gluetun/pkg/updaters/purevpn" + "github.com/qdm12/gluetun/pkg/updaters/slickvpn" + "github.com/qdm12/gluetun/pkg/updaters/surfshark" + "github.com/qdm12/gluetun/pkg/updaters/torguard" + "github.com/qdm12/gluetun/pkg/updaters/vpnsecure" + "github.com/qdm12/gluetun/pkg/updaters/vpnunlimited" + "github.com/qdm12/gluetun/pkg/updaters/vyprvpn" + "github.com/qdm12/gluetun/pkg/updaters/windscribe" + "github.com/qdm12/gosettings" +) + +// UpdateAllSettings contains the configuration for the [UpdateAll] function. +type UpdateAllSettings struct { + // OutputPath is the directory where the provider JSON files will be written. + // It defaults to the current directory if left unset. + OutputPath *string + // ProtonEmail is the email for the ProtonVPN account, which is required + // to update ProtonVPN servers. + ProtonEmail *string + // ProtonPassword is the password for the ProtonVPN account, which is required + // to update ProtonVPN servers. + ProtonPassword *string + // IpinfoToken is the API token for the IPInfo public IP API. + // If not provided, the IP fetcher will still work but may be + // subject to stricter rate limits for ipinfo.io. + IpinfoToken *string + // MinServers is a map of provider name to minimum number of servers required for a successful update. + // If a provider has fewer servers than the specified minimum, the update will be considered a failure + // for that provider. If the provider name is not found in this map, it is assumed that there is no + // minimum server requirement for that provider. + MinServers map[string]uint +} + +func (s *UpdateAllSettings) setDefaults() { + s.OutputPath = gosettings.DefaultPointer(s.OutputPath, "") + s.ProtonEmail = gosettings.DefaultPointer(s.ProtonEmail, "") + s.ProtonPassword = gosettings.DefaultPointer(s.ProtonPassword, "") + s.IpinfoToken = gosettings.DefaultPointer(s.IpinfoToken, "") + if s.MinServers == nil { + s.MinServers = make(map[string]uint) + } +} + +var ( + errProtonEmailRequired = errors.New("proton email is required for updating ProtonVPN servers") + errProtonPasswordRequired = errors.New("proton password is required for updating ProtonVPN servers") + errMinServersProviderNotFound = errors.New("provider name in MinServers not found in list of all providers") +) + +func (s *UpdateAllSettings) validate() error { + switch { + case *s.ProtonEmail == "": + return fmt.Errorf("%w", errProtonEmailRequired) + case *s.ProtonPassword == "": + return fmt.Errorf("%w", errProtonPasswordRequired) + } + + allProviders := providers.All() + for providerName := range s.MinServers { + if !slices.Contains(allProviders, providerName) { + return fmt.Errorf("%w: %s", errMinServersProviderNotFound, providerName) + } + } + + return nil +} + +type Logger interface { + Warn(message string) +} + +var errUpdateAllFailed = errors.New("update failed for one or more providers") + +// UpdateAll fetches server data for all providers in parallel and writes each +// provider's data as .json into the output path specified. +// Errors for individual providers are collected and returned as a combined error. +func UpdateAll(ctx context.Context, client *http.Client, logger Logger, settings UpdateAllSettings) error { + settings.setDefaults() + err := settings.validate() + if err != nil { + return fmt.Errorf("validating settings: %w", err) + } + + const permission = 0o755 + err = os.MkdirAll(*settings.OutputPath, permission) + if err != nil { + return fmt.Errorf("creating output directory: %w", err) + } + + dohDialer, err := doh.New(doh.Settings{ + UpstreamResolvers: []dnsprovider.Provider{ + dnsprovider.Cloudflare(), + dnsprovider.Google(), + }, + }) + if err != nil { + return fmt.Errorf("creating updater DoH dialer: %w", err) + } + parallelResolver := resolver.NewParallelResolver(dohDialer) + unzipper := unzip.New(client) + ipFetcher, err := buildIPFetcher(client, logger, *settings.IpinfoToken) + if err != nil { + return fmt.Errorf("creating IP fetcher: %w", err) + } + fetchers := buildFetchers(client, parallelResolver, unzipper, ipFetcher, + logger, *settings.ProtonEmail, *settings.ProtonPassword) + + results := make(chan error) + + allProviders := providers.All() + for _, providerName := range allProviders { + go func(providerName string) { + fetcher := fetchers[providerName] + minServers := settings.MinServers[providerName] + err := fetchAndWrite(ctx, providerName, fetcher, minServers, *settings.OutputPath) + if err != nil { + err = fmt.Errorf("provider %s: %w", providerName, err) + } + results <- err + }(providerName) + } + + errs := make([]string, 0, len(allProviders)) + for range allProviders { + err := <-results + if err != nil { + errs = append(errs, err.Error()) + } + } + + if len(errs) > 0 { + return fmt.Errorf("%w:\n%s", errUpdateAllFailed, strings.Join(errs, "\n")) + } + return nil +} + +func buildIPFetcher(client *http.Client, logger Logger, ipinfoToken string) ( + fetcher *publicipapi.ResilientFetcher, err error, +) { + nameTokenPairs := []publicipapi.NameToken{ + {Name: string(publicipapi.IPInfo), Token: ipinfoToken}, + {Name: string(publicipapi.IP2Location)}, + {Name: string(publicipapi.IfConfigCo)}, + } + fetchers, err := publicipapi.New(nameTokenPairs, client) + if err != nil { + return nil, fmt.Errorf("creating public IP fetchers: %w", err) + } + fetcher = publicipapi.NewResilient(fetchers, logger) + return fetcher, nil +} + +func buildFetchers(client *http.Client, parallelResolver common.ParallelResolver, + unzipper common.Unzipper, ipFetcher common.IPFetcher, + logger Logger, protonEmail, protonPassword string, +) map[string]common.Fetcher { + return map[string]common.Fetcher{ + providers.Airvpn: airvpn.New(client), + providers.Cyberghost: cyberghost.New(parallelResolver, logger), + providers.Expressvpn: expressvpn.New(unzipper, logger, parallelResolver), + providers.Fastestvpn: fastestvpn.New(client, logger, parallelResolver), + providers.Giganews: giganews.New(unzipper, logger, parallelResolver), + providers.HideMyAss: hidemyass.New(client, logger, parallelResolver), + providers.Ipvanish: ipvanish.New(unzipper, logger, parallelResolver), + providers.Ivpn: ivpn.New(client, logger, parallelResolver), + providers.Mullvad: mullvad.New(client), + providers.Nordvpn: nordvpn.New(client, logger), + providers.Perfectprivacy: perfectprivacy.New(unzipper, logger), + providers.Privado: privado.New(client, logger), + providers.PrivateInternetAccess: privateinternetaccess.New(client), + providers.Privatevpn: privatevpn.New(unzipper, logger, parallelResolver), + providers.Protonvpn: protonvpn.New(client, logger, protonEmail, protonPassword), + providers.Purevpn: purevpn.New(ipFetcher, unzipper, logger, parallelResolver), + providers.SlickVPN: slickvpn.New(client, logger, parallelResolver), + providers.Surfshark: surfshark.New(client, unzipper, logger, parallelResolver), + providers.Torguard: torguard.New(unzipper, logger, parallelResolver), + providers.VPNSecure: vpnsecure.New(client, logger, parallelResolver), + providers.VPNUnlimited: vpnunlimited.New(unzipper, logger, parallelResolver), + providers.Vyprvpn: vyprvpn.New(unzipper, logger, parallelResolver), + providers.Windscribe: windscribe.New(client, logger), + } +} + +func fetchAndWrite(ctx context.Context, providerName string, fetcher common.Fetcher, + minServers uint, outputDirPath string, +) error { + filename := strings.ToLower(strings.ReplaceAll(providerName, " ", "")) + ".json" + destinationPath := filepath.Join(outputDirPath, filename) + const permission = 0o644 + file, err := os.OpenFile(destinationPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, permission) + if err != nil { + return fmt.Errorf("opening output file: %w", err) + } + + servers, err := fetcher.FetchServers(ctx, int(minServers)) //nolint:gosec + if err != nil { + _ = file.Close() + _ = os.Remove(destinationPath) + return fmt.Errorf("fetching servers: %w", err) + } + data := models.Servers{ + Version: fetcher.Version(), + Timestamp: time.Now().Unix(), + Servers: servers, + } + + encoder := json.NewEncoder(file) + encoder.SetIndent("", " ") + err = encoder.Encode(data) + if err != nil { + _ = file.Close() + return fmt.Errorf("encoding servers to JSON: %w", err) + } + + err = file.Close() + if err != nil { + return fmt.Errorf("closing output file: %w", err) + } + + return nil +} diff --git a/pkg/updaters/updateall_test.go b/pkg/updaters/updateall_test.go new file mode 100644 index 00000000..1946677a --- /dev/null +++ b/pkg/updaters/updateall_test.go @@ -0,0 +1,30 @@ +package updaters + +import ( + "net/http" + "testing" + + "github.com/qdm12/gluetun/internal/constants/providers" + "github.com/qdm12/gluetun/internal/provider/common" + "github.com/stretchr/testify/assert" +) + +func Test_buildFetchers(t *testing.T) { + t.Parallel() + + // Verify that all providers have a fetcher + client := (*http.Client)(nil) + logger := (Logger)(nil) + parallelResolver := (common.ParallelResolver)(nil) + unzipper := (common.Unzipper)(nil) + ipFetcher := (common.IPFetcher)(nil) + + fetchers := buildFetchers(client, parallelResolver, unzipper, ipFetcher, + logger, "protonEmail", "protonPassword") + + allProviders := providers.All() + assert.Equal(t, len(allProviders), len(fetchers), "number of fetchers should match number of providers") + for _, providerName := range allProviders { + assert.Contains(t, fetchers, providerName, "fetcher for provider %s should be present", providerName) + } +} diff --git a/internal/provider/vpnsecure/updater/helpers_test.go b/pkg/updaters/vpnsecure/helpers_test.go similarity index 96% rename from internal/provider/vpnsecure/updater/helpers_test.go rename to pkg/updaters/vpnsecure/helpers_test.go index 7025a6b0..ed107c35 100644 --- a/internal/provider/vpnsecure/updater/helpers_test.go +++ b/pkg/updaters/vpnsecure/helpers_test.go @@ -1,4 +1,4 @@ -package updater +package vpnsecure import ( "os" diff --git a/internal/provider/vpnunlimited/updater/hosttoserver.go b/pkg/updaters/vpnsecure/hosttoserver.go similarity index 97% rename from internal/provider/vpnunlimited/updater/hosttoserver.go rename to pkg/updaters/vpnsecure/hosttoserver.go index 605775b3..7ca8a364 100644 --- a/internal/provider/vpnunlimited/updater/hosttoserver.go +++ b/pkg/updaters/vpnsecure/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package vpnsecure import ( "net/netip" diff --git a/internal/provider/vpnsecure/updater/resolve.go b/pkg/updaters/vpnsecure/resolve.go similarity index 96% rename from internal/provider/vpnsecure/updater/resolve.go rename to pkg/updaters/vpnsecure/resolve.go index 1758fab1..d8b632b6 100644 --- a/internal/provider/vpnsecure/updater/resolve.go +++ b/pkg/updaters/vpnsecure/resolve.go @@ -1,4 +1,4 @@ -package updater +package vpnsecure import ( "time" diff --git a/internal/provider/vpnsecure/updater/servers.go b/pkg/updaters/vpnsecure/servers.go similarity index 98% rename from internal/provider/vpnsecure/updater/servers.go rename to pkg/updaters/vpnsecure/servers.go index 05445b4c..27e4014d 100644 --- a/internal/provider/vpnsecure/updater/servers.go +++ b/pkg/updaters/vpnsecure/servers.go @@ -1,4 +1,4 @@ -package updater +package vpnsecure import ( "context" diff --git a/internal/provider/vpnsecure/updater/testdata/index.html b/pkg/updaters/vpnsecure/testdata/index.html similarity index 100% rename from internal/provider/vpnsecure/updater/testdata/index.html rename to pkg/updaters/vpnsecure/testdata/index.html diff --git a/internal/provider/ivpn/updater/updater.go b/pkg/updaters/vpnsecure/updater.go similarity index 86% rename from internal/provider/ivpn/updater/updater.go rename to pkg/updaters/vpnsecure/updater.go index df4427cc..7ecb8555 100644 --- a/internal/provider/ivpn/updater/updater.go +++ b/pkg/updaters/vpnsecure/updater.go @@ -1,4 +1,4 @@ -package updater +package vpnsecure import ( "net/http" @@ -21,3 +21,7 @@ func New(client *http.Client, warner common.Warner, warner: warner, } } + +func (u *Updater) Version() uint16 { + return 1 +} diff --git a/internal/provider/vpnsecure/updater/website.go b/pkg/updaters/vpnsecure/website.go similarity index 99% rename from internal/provider/vpnsecure/updater/website.go rename to pkg/updaters/vpnsecure/website.go index e25ffd19..a9afcb17 100644 --- a/internal/provider/vpnsecure/updater/website.go +++ b/pkg/updaters/vpnsecure/website.go @@ -1,4 +1,4 @@ -package updater +package vpnsecure import ( "context" diff --git a/internal/provider/vpnsecure/updater/website_test.go b/pkg/updaters/vpnsecure/website_test.go similarity index 99% rename from internal/provider/vpnsecure/updater/website_test.go rename to pkg/updaters/vpnsecure/website_test.go index 7c937032..a13d5ed7 100644 --- a/internal/provider/vpnsecure/updater/website_test.go +++ b/pkg/updaters/vpnsecure/website_test.go @@ -1,4 +1,4 @@ -package updater +package vpnsecure import ( "context" diff --git a/internal/provider/vpnunlimited/updater/constants.go b/pkg/updaters/vpnunlimited/constants.go similarity index 99% rename from internal/provider/vpnunlimited/updater/constants.go rename to pkg/updaters/vpnunlimited/constants.go index a88edbb1..484b7622 100644 --- a/internal/provider/vpnunlimited/updater/constants.go +++ b/pkg/updaters/vpnunlimited/constants.go @@ -1,4 +1,4 @@ -package updater +package vpnunlimited import ( "strings" diff --git a/internal/provider/vpnsecure/updater/hosttoserver.go b/pkg/updaters/vpnunlimited/hosttoserver.go similarity index 97% rename from internal/provider/vpnsecure/updater/hosttoserver.go rename to pkg/updaters/vpnunlimited/hosttoserver.go index 605775b3..7f295c0b 100644 --- a/internal/provider/vpnsecure/updater/hosttoserver.go +++ b/pkg/updaters/vpnunlimited/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package vpnunlimited import ( "net/netip" diff --git a/pkg/updaters/vpnunlimited/resolve.go b/pkg/updaters/vpnunlimited/resolve.go new file mode 100644 index 00000000..919f863b --- /dev/null +++ b/pkg/updaters/vpnunlimited/resolve.go @@ -0,0 +1,28 @@ +package vpnunlimited + +import ( + "time" + + "github.com/qdm12/gluetun/internal/updater/resolver" +) + +func parallelResolverSettings(hosts []string) (settings resolver.ParallelSettings) { + const ( + maxFailRatio = 0.1 + maxDuration = 20 * time.Second + betweenDuration = time.Second + maxNoNew = 2 + maxFails = 2 + ) + return resolver.ParallelSettings{ + Hosts: hosts, + MaxFailRatio: maxFailRatio, + Repeat: resolver.RepeatSettings{ + MaxDuration: maxDuration, + BetweenDuration: betweenDuration, + MaxNoNew: maxNoNew, + MaxFails: maxFails, + SortIPs: true, + }, + } +} diff --git a/internal/provider/vpnunlimited/updater/servers.go b/pkg/updaters/vpnunlimited/servers.go similarity index 97% rename from internal/provider/vpnunlimited/updater/servers.go rename to pkg/updaters/vpnunlimited/servers.go index 799273f9..26a61fca 100644 --- a/internal/provider/vpnunlimited/updater/servers.go +++ b/pkg/updaters/vpnunlimited/servers.go @@ -1,4 +1,4 @@ -package updater +package vpnunlimited import ( "context" diff --git a/internal/provider/expressvpn/updater/updater.go b/pkg/updaters/vpnunlimited/updater.go similarity index 85% rename from internal/provider/expressvpn/updater/updater.go rename to pkg/updaters/vpnunlimited/updater.go index d61e235d..850c89ca 100644 --- a/internal/provider/expressvpn/updater/updater.go +++ b/pkg/updaters/vpnunlimited/updater.go @@ -1,4 +1,4 @@ -package updater +package vpnunlimited import ( "github.com/qdm12/gluetun/internal/provider/common" @@ -19,3 +19,7 @@ func New(unzipper common.Unzipper, warner common.Warner, warner: warner, } } + +func (u *Updater) Version() uint16 { + return 1 +} diff --git a/internal/provider/vyprvpn/updater/filename.go b/pkg/updaters/vyprvpn/filename.go similarity index 96% rename from internal/provider/vyprvpn/updater/filename.go rename to pkg/updaters/vyprvpn/filename.go index a2fd3f6e..b2caa712 100644 --- a/internal/provider/vyprvpn/updater/filename.go +++ b/pkg/updaters/vyprvpn/filename.go @@ -1,4 +1,4 @@ -package updater +package vyprvpn import ( "errors" diff --git a/internal/provider/vyprvpn/updater/hosttoserver.go b/pkg/updaters/vyprvpn/hosttoserver.go similarity index 98% rename from internal/provider/vyprvpn/updater/hosttoserver.go rename to pkg/updaters/vyprvpn/hosttoserver.go index df9e9369..aec9175c 100644 --- a/internal/provider/vyprvpn/updater/hosttoserver.go +++ b/pkg/updaters/vyprvpn/hosttoserver.go @@ -1,4 +1,4 @@ -package updater +package vyprvpn import ( "net/netip" diff --git a/internal/provider/vyprvpn/updater/resolve.go b/pkg/updaters/vyprvpn/resolve.go similarity index 97% rename from internal/provider/vyprvpn/updater/resolve.go rename to pkg/updaters/vyprvpn/resolve.go index fde66d47..4f6c0cff 100644 --- a/internal/provider/vyprvpn/updater/resolve.go +++ b/pkg/updaters/vyprvpn/resolve.go @@ -1,4 +1,4 @@ -package updater +package vyprvpn import ( "time" diff --git a/internal/provider/vyprvpn/updater/servers.go b/pkg/updaters/vyprvpn/servers.go similarity index 99% rename from internal/provider/vyprvpn/updater/servers.go rename to pkg/updaters/vyprvpn/servers.go index 33d05eb7..25a8f923 100644 --- a/internal/provider/vyprvpn/updater/servers.go +++ b/pkg/updaters/vyprvpn/servers.go @@ -1,4 +1,4 @@ -package updater +package vyprvpn import ( "context" diff --git a/internal/provider/giganews/updater/updater.go b/pkg/updaters/vyprvpn/updater.go similarity index 84% rename from internal/provider/giganews/updater/updater.go rename to pkg/updaters/vyprvpn/updater.go index d61e235d..490a265e 100644 --- a/internal/provider/giganews/updater/updater.go +++ b/pkg/updaters/vyprvpn/updater.go @@ -1,4 +1,4 @@ -package updater +package vyprvpn import ( "github.com/qdm12/gluetun/internal/provider/common" @@ -19,3 +19,7 @@ func New(unzipper common.Unzipper, warner common.Warner, warner: warner, } } + +func (u *Updater) Version() uint16 { + return 3 //nolint:mnd +} diff --git a/internal/provider/windscribe/updater/api.go b/pkg/updaters/windscribe/api.go similarity index 98% rename from internal/provider/windscribe/updater/api.go rename to pkg/updaters/windscribe/api.go index 9ea83823..ce32eb86 100644 --- a/internal/provider/windscribe/updater/api.go +++ b/pkg/updaters/windscribe/api.go @@ -1,4 +1,4 @@ -package updater +package windscribe import ( "context" diff --git a/internal/provider/windscribe/updater/servers.go b/pkg/updaters/windscribe/servers.go similarity index 98% rename from internal/provider/windscribe/updater/servers.go rename to pkg/updaters/windscribe/servers.go index 586f9821..d12262c4 100644 --- a/internal/provider/windscribe/updater/servers.go +++ b/pkg/updaters/windscribe/servers.go @@ -1,4 +1,4 @@ -package updater +package windscribe import ( "context" diff --git a/internal/provider/windscribe/updater/updater.go b/pkg/updaters/windscribe/updater.go similarity index 76% rename from internal/provider/windscribe/updater/updater.go rename to pkg/updaters/windscribe/updater.go index ff0d41cd..4f6951a3 100644 --- a/internal/provider/windscribe/updater/updater.go +++ b/pkg/updaters/windscribe/updater.go @@ -1,4 +1,4 @@ -package updater +package windscribe import ( "net/http" @@ -17,3 +17,7 @@ func New(client *http.Client, warner common.Warner) *Updater { warner: warner, } } + +func (u *Updater) Version() uint16 { + return 2 //nolint:mnd +}