diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index f3ec270b..9e4f95b6 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -67,7 +67,6 @@ body: - VPNSecure.me - VPNUnlimited - VyprVPN - - WeVPN - Windscribe validations: required: true diff --git a/.github/labels.yml b/.github/labels.yml index 73ee6600..11cf4c6e 100644 --- a/.github/labels.yml +++ b/.github/labels.yml @@ -86,8 +86,6 @@ color: "cfe8d4" - name: "☁️ Vyprvpn" color: "cfe8d4" -- name: "☁️ WeVPN" - color: "cfe8d4" - name: "☁️ Windscribe" color: "cfe8d4" diff --git a/README.md b/README.md index 67746056..004b8928 100644 --- a/README.md +++ b/README.md @@ -58,11 +58,11 @@ Lightweight swiss-army-knife-like VPN client to multiple VPN service providers ## Features - Based on Alpine 3.22 for a small Docker image of 41.1MB -- Supports: **AirVPN**, **Cyberghost**, **ExpressVPN**, **FastestVPN**, **Giganews**, **HideMyAss**, **IPVanish**, **IVPN**, **Mullvad**, **NordVPN**, **Perfect Privacy**, **Privado**, **Private Internet Access**, **PrivateVPN**, **ProtonVPN**, **PureVPN**, **SlickVPN**, **Surfshark**, **TorGuard**, **VPNSecure.me**, **VPNUnlimited**, **Vyprvpn**, **WeVPN**, **Windscribe** servers +- Supports: **AirVPN**, **Cyberghost**, **ExpressVPN**, **FastestVPN**, **Giganews**, **HideMyAss**, **IPVanish**, **IVPN**, **Mullvad**, **NordVPN**, **Perfect Privacy**, **Privado**, **Private Internet Access**, **PrivateVPN**, **ProtonVPN**, **PureVPN**, **SlickVPN**, **Surfshark**, **TorGuard**, **VPNSecure.me**, **VPNUnlimited**, **Vyprvpn**, **Windscribe** servers - Supports OpenVPN for all providers listed - Supports Wireguard both kernelspace and userspace - For **AirVPN**, **FastestVPN**, **Ivpn**, **Mullvad**, **NordVPN**, **Perfect privacy**, **ProtonVPN**, **Surfshark** and **Windscribe** - - For **Cyberghost**, **Private Internet Access**, **PrivateVPN**, **PureVPN**, **Torguard**, **VPN Unlimited**, **VyprVPN** and **WeVPN** using [the custom provider](https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/custom.md) + - For **Cyberghost**, **Private Internet Access**, **PrivateVPN**, **PureVPN**, **Torguard**, **VPN Unlimited** and **VyprVPN** using [the custom provider](https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/custom.md) - For custom Wireguard configurations using [the custom provider](https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/custom.md) - More in progress, see [#134](https://github.com/qdm12/gluetun/issues/134) - DNS over TLS baked in with service provider(s) of your choice diff --git a/internal/configuration/settings/openvpn.go b/internal/configuration/settings/openvpn.go index 853fa14d..7cffd4d3 100644 --- a/internal/configuration/settings/openvpn.go +++ b/internal/configuration/settings/openvpn.go @@ -209,8 +209,7 @@ func validateOpenVPNClientKey(vpnProvider, clientKey string) (err error) { case providers.Airvpn, providers.Cyberghost, - providers.VPNUnlimited, - providers.Wevpn: + providers.VPNUnlimited: if clientKey == "" { return fmt.Errorf("%w", ErrMissingValue) } diff --git a/internal/configuration/settings/openvpnselection.go b/internal/configuration/settings/openvpnselection.go index b3d57b56..4c3700a6 100644 --- a/internal/configuration/settings/openvpnselection.go +++ b/internal/configuration/settings/openvpnselection.go @@ -108,9 +108,6 @@ func (o OpenVPNSelection) validate(vpnProvider string) (err error) { case providers.SlickVPN: allowedTCP = []uint16{443, 8080, 8888} allowedUDP = []uint16{443, 8080, 8888} - case providers.Wevpn: - allowedTCP = []uint16{53, 1195, 1199, 2018} - allowedUDP = []uint16{80, 1194, 1198} case providers.Windscribe: allowedTCP = []uint16{21, 22, 80, 123, 143, 443, 587, 1194, 3306, 8080, 54783} allowedUDP = []uint16{53, 80, 123, 443, 1194, 54783} diff --git a/internal/constants/providers/providers.go b/internal/constants/providers/providers.go index 0c511e5e..b8fdb51f 100644 --- a/internal/constants/providers/providers.go +++ b/internal/constants/providers/providers.go @@ -27,7 +27,6 @@ const ( VPNSecure = "vpnsecure" VPNUnlimited = "vpn unlimited" Vyprvpn = "vyprvpn" - Wevpn = "wevpn" Windscribe = "windscribe" ) @@ -56,7 +55,6 @@ func All() []string { VPNSecure, VPNUnlimited, Vyprvpn, - Wevpn, Windscribe, } } diff --git a/internal/models/markdown.go b/internal/models/markdown.go index 4c45346e..efa6812f 100644 --- a/internal/models/markdown.go +++ b/internal/models/markdown.go @@ -166,8 +166,6 @@ func getMarkdownHeaders(vpnProvider string) (headers []string, err error) { return []string{countryHeader, cityHeader, hostnameHeader, freeHeader, streamHeader, tcpHeader, udpHeader}, nil case providers.Vyprvpn: return []string{regionHeader, hostnameHeader, tcpHeader, udpHeader}, nil - case providers.Wevpn: - return []string{cityHeader, hostnameHeader, tcpHeader, udpHeader}, nil case providers.Windscribe: return []string{regionHeader, cityHeader, hostnameHeader, vpnHeader}, nil default: diff --git a/internal/provider/providers.go b/internal/provider/providers.go index 2091c7cf..a86b4feb 100644 --- a/internal/provider/providers.go +++ b/internal/provider/providers.go @@ -33,7 +33,6 @@ import ( "github.com/qdm12/gluetun/internal/provider/vpnsecure" "github.com/qdm12/gluetun/internal/provider/vpnunlimited" "github.com/qdm12/gluetun/internal/provider/vyprvpn" - "github.com/qdm12/gluetun/internal/provider/wevpn" "github.com/qdm12/gluetun/internal/provider/windscribe" ) @@ -83,7 +82,6 @@ func NewProviders(storage Storage, timeNow func() time.Time, providers.VPNSecure: vpnsecure.New(storage, randSource, client, updaterWarner, parallelResolver), providers.VPNUnlimited: vpnunlimited.New(storage, randSource, unzipper, updaterWarner, parallelResolver), providers.Vyprvpn: vyprvpn.New(storage, randSource, unzipper, updaterWarner, parallelResolver), - providers.Wevpn: wevpn.New(storage, randSource, updaterWarner, parallelResolver), providers.Windscribe: windscribe.New(storage, randSource, client, updaterWarner), } diff --git a/internal/provider/wevpn/connection.go b/internal/provider/wevpn/connection.go deleted file mode 100644 index 1b7f81d7..00000000 --- a/internal/provider/wevpn/connection.go +++ /dev/null @@ -1,15 +0,0 @@ -package wevpn - -import ( - "github.com/qdm12/gluetun/internal/configuration/settings" - "github.com/qdm12/gluetun/internal/models" - "github.com/qdm12/gluetun/internal/provider/utils" -) - -func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) ( - connection models.Connection, err error, -) { - defaults := utils.NewConnectionDefaults(1195, 1194, 0) //nolint:mnd - return utils.GetConnection(p.Name(), - p.storage, selection, defaults, ipv6Supported, p.randSource) -} diff --git a/internal/provider/wevpn/connection_test.go b/internal/provider/wevpn/connection_test.go deleted file mode 100644 index 7011cbfa..00000000 --- a/internal/provider/wevpn/connection_test.go +++ /dev/null @@ -1,115 +0,0 @@ -package wevpn - -import ( - "errors" - "math/rand" - "net/netip" - "testing" - - "github.com/golang/mock/gomock" - "github.com/qdm12/gluetun/internal/configuration/settings" - "github.com/qdm12/gluetun/internal/constants" - "github.com/qdm12/gluetun/internal/constants/providers" - "github.com/qdm12/gluetun/internal/constants/vpn" - "github.com/qdm12/gluetun/internal/models" - "github.com/qdm12/gluetun/internal/provider/common" - "github.com/stretchr/testify/assert" -) - -func Test_Provider_GetConnection(t *testing.T) { - t.Parallel() - - const provider = providers.Wevpn - - errTest := errors.New("test error") - - testCases := map[string]struct { - filteredServers []models.Server - storageErr error - selection settings.ServerSelection - ipv6Supported bool - connection models.Connection - errWrapped error - errMessage string - panicMessage string - }{ - "error": { - storageErr: errTest, - errWrapped: errTest, - errMessage: "filtering servers: test error", - }, - "default OpenVPN TCP port": { - filteredServers: []models.Server{ - {IPs: []netip.Addr{netip.AddrFrom4([4]byte{1, 1, 1, 1})}}, - }, - selection: settings.ServerSelection{ - OpenVPN: settings.OpenVPNSelection{ - Protocol: constants.TCP, - }, - }.WithDefaults(provider), - connection: models.Connection{ - Type: vpn.OpenVPN, - IP: netip.AddrFrom4([4]byte{1, 1, 1, 1}), - Port: 1195, - Protocol: constants.TCP, - }, - }, - "default OpenVPN UDP port": { - filteredServers: []models.Server{ - {IPs: []netip.Addr{netip.AddrFrom4([4]byte{1, 1, 1, 1})}}, - }, - selection: settings.ServerSelection{ - OpenVPN: settings.OpenVPNSelection{ - Protocol: constants.UDP, - }, - }.WithDefaults(provider), - connection: models.Connection{ - Type: vpn.OpenVPN, - IP: netip.AddrFrom4([4]byte{1, 1, 1, 1}), - Port: 1194, - Protocol: constants.UDP, - }, - }, - "default Wireguard port": { - filteredServers: []models.Server{ - {IPs: []netip.Addr{netip.AddrFrom4([4]byte{1, 1, 1, 1})}, WgPubKey: "x"}, - }, - selection: settings.ServerSelection{ - VPN: vpn.Wireguard, - }.WithDefaults(provider), - panicMessage: "no default Wireguard port is defined!", - }, - } - - for name, testCase := range testCases { - t.Run(name, func(t *testing.T) { - t.Parallel() - ctrl := gomock.NewController(t) - - storage := common.NewMockStorage(ctrl) - storage.EXPECT().FilterServers(provider, testCase.selection). - Return(testCase.filteredServers, testCase.storageErr) - randSource := rand.NewSource(0) - - warner := (common.Warner)(nil) - parallelResolver := (common.ParallelResolver)(nil) - provider := New(storage, randSource, warner, parallelResolver) - - if testCase.panicMessage != "" { - assert.PanicsWithValue(t, testCase.panicMessage, func() { - _, _ = provider.GetConnection(testCase.selection, testCase.ipv6Supported) - }) - return - } - - connection, err := provider.GetConnection(testCase.selection, testCase.ipv6Supported) - - assert.ErrorIs(t, err, testCase.errWrapped) - if testCase.errWrapped != nil { - assert.EqualError(t, err, testCase.errMessage) - } - - assert.Equal(t, testCase.connection, connection) - }) - } -} diff --git a/internal/provider/wevpn/openvpnconf.go b/internal/provider/wevpn/openvpnconf.go deleted file mode 100644 index 4d48deb7..00000000 --- a/internal/provider/wevpn/openvpnconf.go +++ /dev/null @@ -1,32 +0,0 @@ -package wevpn - -import ( - "github.com/qdm12/gluetun/internal/configuration/settings" - "github.com/qdm12/gluetun/internal/constants/openvpn" - "github.com/qdm12/gluetun/internal/models" - "github.com/qdm12/gluetun/internal/provider/utils" -) - -func (p *Provider) OpenVPNConfig(connection models.Connection, - settings settings.OpenVPN, ipv6Supported bool, -) (lines []string) { - //nolint:mnd - providerSettings := utils.OpenVPNProviderSettings{ - RemoteCertTLS: true, - AuthUserPass: true, - Ciphers: []string{ - openvpn.AES256gcm, - }, - Auth: openvpn.SHA512, - MssFix: 1320, - Ping: 30, - RenegDisabled: true, - CAs: []string{"MIIDQjCCAiqgAwIBAgIUPppqnRZfvGGrT4GjXFE4Q29QzgowDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAwwIQ2hhbmdlTWUwHhcNMTkxMTA1MjMzMzIzWhcNMjkxMTAyMjMzMzIzWjATMREwDwYDVQQDDAhDaGFuZ2VNZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL5DFBJlTqhXukJFWlI8TNW9+HEQCZXhyVFvQhJFF2xIGVNx51XzqxiRANjVJZJrA68kV8az0v2Dxj0SFnRWDR6pOjjdp2CyHFcgHyfv+4MrsreAtkue86bB/1ECPWaoIwtaLnwI6SEmFZl98RlI9v4M/8IE4chOnMrM/F22+2OXI//TduvTcbyOMUiiouIP8UG1FB3J5FyuaW6qPZz2G0efDoaOI+E9LSxE87OoFrII7UqdHlWxRb3nUuPU1Ee4rN/d4tFyP4AvPKfsGhVOwyGG21IdRnbXIuDi0xytkCGOZ4j2bq5zqudnp4Izt6yJgdzZpQQWK3kSHB3qTT/Yzl8CAwEAAaOBjTCBijAdBgNVHQ4EFgQUXYkoo4WbkkvbgLVdGob9RScRf3AwTgYDVR0jBEcwRYAUXYkoo4WbkkvbgLVdGob9RScRf3ChF6QVMBMxETAPBgNVBAMMCENoYW5nZU1lghQ+mmqdFl+8YatPgaNcUThDb1DOCjAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAOr1XmyWBRYfTQPNvZZ+DjCfiRYzLOi2AGefZt/jETqPDF8deVbyL1fLhXZzuX+5Etlsil3PflJjpzc/FSeZRuYRaShtwF3j6I08Eww9rBkaCnsukMUcLtMOvhdAU8dUakcRA2wkQ7Z+TWdMBv5+/6MnX10An1fIz7bAy3btMEOPTEFLo8Bst1SxJtUMaqhUteSOJ1VorpK3CWfOFaXxbJAb4E0+3zt6Vsc8mY5tt6wAi8IqiN4WD79ZdvKxENK4FMkR1kNpBY97mvdf82rzpwiBuJgN5ywmH78Ghj+9T8nI6/UIqJ1y22IRYGv6dMif8fHo5WWhCv3qmCqqY8vwuxw=="}, //nolint:lll - Cert: "MIIDTDCCAjSgAwIBAgIRAKxt8SMIXezjmHm2KDCAQdIwDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAwwIQ2hhbmdlTWUwHhcNMTkxMTA1MjMzMzI0WhcNMjkxMTAyMjMzMzI0WjAOMQwwCgYDVQQDDAN0Y3AwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvEwY2erLhMm3Mpsnybm3G6zvGyeblUAaehQVEUs+KM2/5np0Ovx0y8Iz9pIC9ITaWM0B3dM6uBsNEtylZIe4Dd9aFujunSeCFsLRf8i9AbrUombpQ6P4jzYFBxwcEw//UShwa4HZI6JuSYikdpx/dyXdBH2skahwDVc8VUFdBLLSglfKGbuzP9GsdSwQCeBRWgA3dvIzIkQkBwfnt9WQKUfRAe8e5NybaAn8Yuu9sjLkQe6eyV7toxkZTcEXdABG2vtdTEzlAsQilZzIxg3jcdeEgMgRKngng+YNP0rR5nofZ1iDlp+vBj0nuqTTJLHMrRWPIc7bdYFD/f2J49WORAgMBAAGjgZ8wgZwwCQYDVR0TBAIwADAdBgNVHQ4EFgQUmSAFmCo1FAKVq8RQF7jMxMxcMtUwTgYDVR0jBEcwRYAUXYkoo4WbkkvbgLVdGob9RScRf3ChF6QVMBMxETAPBgNVBAMMCENoYW5nZU1lghQ+mmqdFl+8YatPgaNcUThDb1DOCjATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwDQYJKoZIhvcNAQELBQADggEBADPqdEgL+0kou8P974QEaNg1XOAXpwP0NNqbkZ/Oj9+Lp96YAhAHOAJig+RWbBktK8zu8oUUGR1qLXAWCmirlXErVuBRnadTEh3A7SOuY02BcsYAtpQ2EU9j5K/LV7nTfagkVdWy7x/av361UD4t9fv1j4YYTh4XLRp7KVXs6AGZ7T1hqPYFMUIoPpFhPzFxH4euJjfazr4SkTR6k6Vhw3pyFd6HP65vcqpzHGxFytSa8HtltBk2DpzIf8yV9TEy+gOXFaaGss0YKQ5OU1ieqZRuLVEGiu17lByYiQGyemIETJbdkyiSg93dDJRxjaTk7c8CEdpipt07ndSIPldMtXA=", //nolint:lll - TLSCrypt: "7be66c0df0b8855e076d9e37b19f9ff3c1735ed537dee6dc786e51bdb8502f878077eeba0420a25e2b04814d22bbdcc0191a4fc396fdba1af6eb090a9d8664f18e70012ee98a2e32c28620a771d13cf3a619c417480c2c312562fffaebfd7ba73f57a28edde6c287365e6ce28291a29728da211cb53e01aa46b92f5f276c61fb46bd810b41219022c8f3d9e699fe9ade6bfcbb937fbbf6f49d741740e71c7c008a9a13c2432608038c6310b4f33588d8d234b3dffcf0823395267d73140d0e9a40e323ca92866c37073bfb072ab9de518bb9f2c65df7e219c2f114afbcf7c6e3c401cb08c3ed2901725b0601d2b5de89245719dd32506d52f149d14156215c1e", //nolint:lll - ExtraLines: []string{ - "redirect-gateway def1 bypass-dhcp", - }, - } - return utils.OpenVPNConfig(providerSettings, connection, settings, ipv6Supported) -} diff --git a/internal/provider/wevpn/provider.go b/internal/provider/wevpn/provider.go deleted file mode 100644 index 86af0e18..00000000 --- a/internal/provider/wevpn/provider.go +++ /dev/null @@ -1,30 +0,0 @@ -package wevpn - -import ( - "math/rand" - - "github.com/qdm12/gluetun/internal/constants/providers" - "github.com/qdm12/gluetun/internal/provider/common" - "github.com/qdm12/gluetun/internal/provider/wevpn/updater" -) - -type Provider struct { - storage common.Storage - randSource rand.Source - common.Fetcher -} - -func New(storage common.Storage, randSource rand.Source, - updaterWarner common.Warner, - parallelResolver common.ParallelResolver, -) *Provider { - return &Provider{ - storage: storage, - randSource: randSource, - Fetcher: updater.New(updaterWarner, parallelResolver), - } -} - -func (p *Provider) Name() string { - return providers.Wevpn -} diff --git a/internal/provider/wevpn/updater/cities.go b/internal/provider/wevpn/updater/cities.go deleted file mode 100644 index 3df11d1d..00000000 --- a/internal/provider/wevpn/updater/cities.go +++ /dev/null @@ -1,76 +0,0 @@ -package updater - -// getAvailableCities get available cities as listed on the WeVPN website. -func getAvailableCities() (cities []string) { - return []string{ - "Cairo", - "Chennai", - "Denizli", - "Dubai", - "Johannesburg", - "Lagos", - "Tel Aviv", - "Atlanta", - "Buenos Aires", - "Chicago", - "Dallas", - "Denver", - "Los Angeles", - "Los Angeles-PF", - "Mexico City", - "Miami", - "Montreal", - "New Jersey", - "New York", - "New York-PF", - "Phoenix", - "Salt Lake City", - "San Jose", - "Sao Paulo", - "Seattle", - "Toronto", - "Vancouver", - "Washington DC", - "Auckland", - "Hanoi", - "Hong Kong", - "Jakarta", - "Manila", - "Melbourne", - "Moscow", - "Seoul", - "Sibu", - "Singapore", - "St Petersburg", - "Sydney", - "Taipei", - "Tokyo", - "Amsterdam", - "Athens", - "Belgrade", - "Brussels", - "Bucharest", - "Budapest", - "Copenhagen", - "Dublin", - "Frankfurt", - "Helsinki", - "Kiev", - "Lisbon", - "London", - "London-PF", - "Luxembourg", - "Madrid", - "Manchester", - "Milan", - "Oslo", - "Oulu", - "Paris", - "Prague", - "Sofia", - "Stockholm", - "Vienna", - "Warsaw", - "Zurich", - } -} diff --git a/internal/provider/wevpn/updater/hostname.go b/internal/provider/wevpn/updater/hostname.go deleted file mode 100644 index f96a7709..00000000 --- a/internal/provider/wevpn/updater/hostname.go +++ /dev/null @@ -1,24 +0,0 @@ -package updater - -import "strings" - -func getHostnameFromCity(city string) (hostname string) { - host := strings.ToLower(city) - host = strings.ReplaceAll(host, ".", "") - host = strings.ReplaceAll(host, " ", "") - - specialCases := map[string]string{ - "washingtondc": "washington", - "mexicocity": "mexico", - "denizli": "bursa", - "sibu": "kualalumpur", - "kiev": "kyiv", - "stpetersburg": "petersburg", - } - if specialHost, ok := specialCases[host]; ok { - host = specialHost - } - - hostname = host + ".wevpn.com" - return hostname -} diff --git a/internal/provider/wevpn/updater/resolve.go b/internal/provider/wevpn/updater/resolve.go deleted file mode 100644 index d0b3fa0c..00000000 --- a/internal/provider/wevpn/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/wevpn/updater/servers.go b/internal/provider/wevpn/updater/servers.go deleted file mode 100644 index fe32fc79..00000000 --- a/internal/provider/wevpn/updater/servers.go +++ /dev/null @@ -1,62 +0,0 @@ -package updater - -import ( - "context" - "errors" - "fmt" - "sort" - - "github.com/qdm12/gluetun/internal/constants/vpn" - "github.com/qdm12/gluetun/internal/models" - "github.com/qdm12/gluetun/internal/provider/common" -) - -var ( - ErrGetZip = errors.New("cannot get OpenVPN ZIP file") - ErrGetAPI = errors.New("cannot fetch server information from API") -) - -func (u *Updater) FetchServers(ctx context.Context, minServers int) ( - servers []models.Server, err error, -) { - cities := getAvailableCities() - servers = make([]models.Server, 0, len(cities)) - hostnames := make([]string, len(cities)) - hostnameToCity := make(map[string]string, len(cities)) - - for i, city := range cities { - hostname := getHostnameFromCity(city) - hostnames[i] = hostname - hostnameToCity[hostname] = city - } - - resolverSettings := parallelResolverSettings(hostnames) - hostnameToIPs, warnings, err := u.parallelResolver.Resolve(ctx, resolverSettings) - for _, warning := range warnings { - u.warner.Warn(warning) - } - if err != nil { - return nil, err - } - - if len(hostnameToIPs) < minServers { - return nil, fmt.Errorf("%w: %d and expected at least %d", - common.ErrNotEnoughServers, len(servers), minServers) - } - - for hostname, ips := range hostnameToIPs { - city := hostnameToCity[hostname] - server := models.Server{ - VPN: vpn.OpenVPN, - City: city, - Hostname: hostname, - UDP: true, - IPs: ips, - } - servers = append(servers, server) - } - - sort.Sort(models.SortableServers(servers)) - - return servers, nil -} diff --git a/internal/provider/wevpn/updater/updater.go b/internal/provider/wevpn/updater/updater.go deleted file mode 100644 index 47f9b831..00000000 --- a/internal/provider/wevpn/updater/updater.go +++ /dev/null @@ -1,15 +0,0 @@ -package updater - -import "github.com/qdm12/gluetun/internal/provider/common" - -type Updater struct { - parallelResolver common.ParallelResolver - warner common.Warner -} - -func New(warner common.Warner, parallelResolver common.ParallelResolver) *Updater { - return &Updater{ - parallelResolver: parallelResolver, - warner: warner, - } -} diff --git a/internal/storage/servers.json b/internal/storage/servers.json index b8829634..66b9dfc8 100644 --- a/internal/storage/servers.json +++ b/internal/storage/servers.json @@ -297189,633 +297189,6 @@ } ] }, - "wevpn": { - "version": 2, - "timestamp": 1679755674, - "servers": [ - { - "vpn": "openvpn", - "city": "Amsterdam", - "hostname": "amsterdam.wevpn.com", - "udp": true, - "ips": [ - "89.238.177.234" - ] - }, - { - "vpn": "openvpn", - "city": "Athens", - "hostname": "athens.wevpn.com", - "udp": true, - "ips": [ - "185.51.134.210" - ] - }, - { - "vpn": "openvpn", - "city": "Atlanta", - "hostname": "atlanta.wevpn.com", - "udp": true, - "ips": [ - "104.223.91.146" - ] - }, - { - "vpn": "openvpn", - "city": "Auckland", - "hostname": "auckland.wevpn.com", - "udp": true, - "ips": [ - "103.108.94.226" - ] - }, - { - "vpn": "openvpn", - "city": "Belgrade", - "hostname": "belgrade.wevpn.com", - "udp": true, - "ips": [ - "37.120.193.170" - ] - }, - { - "vpn": "openvpn", - "city": "Brussels", - "hostname": "brussels.wevpn.com", - "udp": true, - "ips": [ - "77.243.191.178" - ] - }, - { - "vpn": "openvpn", - "city": "Bucharest", - "hostname": "bucharest.wevpn.com", - "udp": true, - "ips": [ - "86.105.25.162" - ] - }, - { - "vpn": "openvpn", - "city": "Budapest", - "hostname": "budapest.wevpn.com", - "udp": true, - "ips": [ - "185.128.26.130" - ] - }, - { - "vpn": "openvpn", - "city": "Buenos Aires", - "hostname": "buenosaires.wevpn.com", - "udp": true, - "ips": [ - "131.255.4.140" - ] - }, - { - "vpn": "openvpn", - "city": "Cairo", - "hostname": "cairo.wevpn.com", - "udp": true, - "ips": [ - "188.214.122.138" - ] - }, - { - "vpn": "openvpn", - "city": "Chennai", - "hostname": "chennai.wevpn.com", - "udp": true, - "ips": [ - "169.38.107.52" - ] - }, - { - "vpn": "openvpn", - "city": "Chicago", - "hostname": "chicago.wevpn.com", - "udp": true, - "ips": [ - "69.39.239.72" - ] - }, - { - "vpn": "openvpn", - "city": "Copenhagen", - "hostname": "copenhagen.wevpn.com", - "udp": true, - "ips": [ - "37.120.194.82" - ] - }, - { - "vpn": "openvpn", - "city": "Dallas", - "hostname": "dallas.wevpn.com", - "udp": true, - "ips": [ - "194.110.112.74" - ] - }, - { - "vpn": "openvpn", - "city": "Denizli", - "hostname": "bursa.wevpn.com", - "udp": true, - "ips": [ - "89.252.132.138" - ] - }, - { - "vpn": "openvpn", - "city": "Denver", - "hostname": "denver.wevpn.com", - "udp": true, - "ips": [ - "70.39.71.2" - ] - }, - { - "vpn": "openvpn", - "city": "Dubai", - "hostname": "dubai.wevpn.com", - "udp": true, - "ips": [ - "217.138.193.42" - ] - }, - { - "vpn": "openvpn", - "city": "Dublin", - "hostname": "dublin.wevpn.com", - "udp": true, - "ips": [ - "217.138.222.138" - ] - }, - { - "vpn": "openvpn", - "city": "Frankfurt", - "hostname": "frankfurt.wevpn.com", - "udp": true, - "ips": [ - "45.141.152.178" - ] - }, - { - "vpn": "openvpn", - "city": "Hanoi", - "hostname": "hanoi.wevpn.com", - "udp": true, - "ips": [ - "188.214.152.194" - ] - }, - { - "vpn": "openvpn", - "city": "Helsinki", - "hostname": "helsinki.wevpn.com", - "udp": true, - "ips": [ - "185.212.149.152" - ] - }, - { - "vpn": "openvpn", - "city": "Hong Kong", - "hostname": "hongkong.wevpn.com", - "udp": true, - "ips": [ - "84.17.37.55" - ] - }, - { - "vpn": "openvpn", - "city": "Jakarta", - "hostname": "jakarta.wevpn.com", - "udp": true, - "ips": [ - "45.133.181.58" - ] - }, - { - "vpn": "openvpn", - "city": "Johannesburg", - "hostname": "johannesburg.wevpn.com", - "udp": true, - "ips": [ - "102.165.20.38" - ] - }, - { - "vpn": "openvpn", - "city": "Kiev", - "hostname": "kyiv.wevpn.com", - "udp": true, - "ips": [ - "37.19.218.197" - ] - }, - { - "vpn": "openvpn", - "city": "Lagos", - "hostname": "lagos.wevpn.com", - "udp": true, - "ips": [ - "102.129.144.142" - ] - }, - { - "vpn": "openvpn", - "city": "Lisbon", - "hostname": "lisbon.wevpn.com", - "udp": true, - "ips": [ - "185.90.57.152" - ] - }, - { - "vpn": "openvpn", - "city": "London", - "hostname": "london.wevpn.com", - "udp": true, - "ips": [ - "45.141.154.2" - ] - }, - { - "vpn": "openvpn", - "city": "London-PF", - "hostname": "london-pf.wevpn.com", - "udp": true, - "ips": [ - "77.243.177.78" - ] - }, - { - "vpn": "openvpn", - "city": "Los Angeles", - "hostname": "losangeles.wevpn.com", - "udp": true, - "ips": [ - "45.152.182.82" - ] - }, - { - "vpn": "openvpn", - "city": "Los Angeles-PF", - "hostname": "losangeles-pf.wevpn.com", - "udp": true, - "ips": [ - "66.55.92.75" - ] - }, - { - "vpn": "openvpn", - "city": "Luxembourg", - "hostname": "luxembourg.wevpn.com", - "udp": true, - "ips": [ - "5.253.204.194" - ] - }, - { - "vpn": "openvpn", - "city": "Madrid", - "hostname": "madrid.wevpn.com", - "udp": true, - "ips": [ - "45.152.183.242" - ] - }, - { - "vpn": "openvpn", - "city": "Manchester", - "hostname": "manchester.wevpn.com", - "udp": true, - "ips": [ - "86.106.136.98" - ] - }, - { - "vpn": "openvpn", - "city": "Manila", - "hostname": "manila.wevpn.com", - "udp": true, - "ips": [ - "188.214.125.106" - ] - }, - { - "vpn": "openvpn", - "city": "Melbourne", - "hostname": "melbourne.wevpn.com", - "udp": true, - "ips": [ - "116.206.230.130" - ] - }, - { - "vpn": "openvpn", - "city": "Mexico City", - "hostname": "mexico.wevpn.com", - "udp": true, - "ips": [ - "169.57.35.97" - ] - }, - { - "vpn": "openvpn", - "city": "Miami", - "hostname": "miami.wevpn.com", - "udp": true, - "ips": [ - "96.47.224.2" - ] - }, - { - "vpn": "openvpn", - "city": "Milan", - "hostname": "milan.wevpn.com", - "udp": true, - "ips": [ - "217.138.197.138" - ] - }, - { - "vpn": "openvpn", - "city": "Montreal", - "hostname": "montreal.wevpn.com", - "udp": true, - "ips": [ - "217.138.200.242" - ] - }, - { - "vpn": "openvpn", - "city": "Moscow", - "hostname": "moscow.wevpn.com", - "udp": true, - "ips": [ - "80.93.181.194" - ] - }, - { - "vpn": "openvpn", - "city": "New Jersey", - "hostname": "newjersey.wevpn.com", - "udp": true, - "ips": [ - "23.226.131.146" - ] - }, - { - "vpn": "openvpn", - "city": "New York", - "hostname": "newyork.wevpn.com", - "udp": true, - "ips": [ - "217.138.206.98" - ] - }, - { - "vpn": "openvpn", - "city": "New York-PF", - "hostname": "newyork-pf.wevpn.com", - "udp": true, - "ips": [ - "188.241.179.2" - ] - }, - { - "vpn": "openvpn", - "city": "Oslo", - "hostname": "oslo.wevpn.com", - "udp": true, - "ips": [ - "84.247.50.10" - ] - }, - { - "vpn": "openvpn", - "city": "Oulu", - "hostname": "oulu.wevpn.com", - "udp": true, - "ips": [ - "188.126.89.174" - ] - }, - { - "vpn": "openvpn", - "city": "Paris", - "hostname": "paris.wevpn.com", - "udp": true, - "ips": [ - "37.120.136.234" - ] - }, - { - "vpn": "openvpn", - "city": "Phoenix", - "hostname": "phoenix.wevpn.com", - "udp": true, - "ips": [ - "170.130.15.34" - ] - }, - { - "vpn": "openvpn", - "city": "Prague", - "hostname": "prague.wevpn.com", - "udp": true, - "ips": [ - "217.138.199.138" - ] - }, - { - "vpn": "openvpn", - "city": "Salt Lake City", - "hostname": "saltlakecity.wevpn.com", - "udp": true, - "ips": [ - "107.182.234.233" - ] - }, - { - "vpn": "openvpn", - "city": "San Jose", - "hostname": "sanjose.wevpn.com", - "udp": true, - "ips": [ - "66.115.157.226" - ] - }, - { - "vpn": "openvpn", - "city": "Sao Paulo", - "hostname": "saopaulo.wevpn.com", - "udp": true, - "ips": [ - "177.54.152.89" - ] - }, - { - "vpn": "openvpn", - "city": "Seattle", - "hostname": "seattle.wevpn.com", - "udp": true, - "ips": [ - "104.140.21.178" - ] - }, - { - "vpn": "openvpn", - "city": "Seoul", - "hostname": "seoul.wevpn.com", - "udp": true, - "ips": [ - "169.56.83.206" - ] - }, - { - "vpn": "openvpn", - "city": "Sibu", - "hostname": "kualalumpur.wevpn.com", - "udp": true, - "ips": [ - "223.25.246.4" - ] - }, - { - "vpn": "openvpn", - "city": "Singapore", - "hostname": "singapore.wevpn.com", - "udp": true, - "ips": [ - "84.17.38.144" - ] - }, - { - "vpn": "openvpn", - "city": "Sofia", - "hostname": "sofia.wevpn.com", - "udp": true, - "ips": [ - "217.138.221.42" - ] - }, - { - "vpn": "openvpn", - "city": "St Petersburg", - "hostname": "petersburg.wevpn.com", - "udp": true, - "ips": [ - "82.202.220.242" - ] - }, - { - "vpn": "openvpn", - "city": "Stockholm", - "hostname": "stockholm.wevpn.com", - "udp": true, - "ips": [ - "45.83.91.66" - ] - }, - { - "vpn": "openvpn", - "city": "Sydney", - "hostname": "sydney.wevpn.com", - "udp": true, - "ips": [ - "46.102.153.106" - ] - }, - { - "vpn": "openvpn", - "city": "Taipei", - "hostname": "taipei.wevpn.com", - "udp": true, - "ips": [ - "188.214.106.98" - ] - }, - { - "vpn": "openvpn", - "city": "Tel Aviv", - "hostname": "telaviv.wevpn.com", - "udp": true, - "ips": [ - "212.199.61.55" - ] - }, - { - "vpn": "openvpn", - "city": "Tokyo", - "hostname": "tokyo.wevpn.com", - "udp": true, - "ips": [ - "84.17.34.8" - ] - }, - { - "vpn": "openvpn", - "city": "Toronto", - "hostname": "toronto.wevpn.com", - "udp": true, - "ips": [ - "184.75.208.234" - ] - }, - { - "vpn": "openvpn", - "city": "Vancouver", - "hostname": "vancouver.wevpn.com", - "udp": true, - "ips": [ - "71.19.249.109" - ] - }, - { - "vpn": "openvpn", - "city": "Vienna", - "hostname": "vienna.wevpn.com", - "udp": true, - "ips": [ - "37.120.212.162" - ] - }, - { - "vpn": "openvpn", - "city": "Warsaw", - "hostname": "warsaw.wevpn.com", - "udp": true, - "ips": [ - "217.138.209.122" - ] - }, - { - "vpn": "openvpn", - "city": "Washington DC", - "hostname": "washington.wevpn.com", - "udp": true, - "ips": [ - "70.32.0.208" - ] - }, - { - "vpn": "openvpn", - "city": "Zurich", - "hostname": "zurich.wevpn.com", - "udp": true, - "ips": [ - "37.120.137.82" - ] - } - ] - }, "windscribe": { "version": 2, "timestamp": 1722459630, @@ -306792,4 +306165,4 @@ } ] } -} +} \ No newline at end of file