chore: use gofumpt for code formatting

This commit is contained in:
Quentin McGaw
2024-10-11 19:20:48 +00:00
parent 3daf15a612
commit 76a4bb5dc3
289 changed files with 784 additions and 548 deletions

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(443, 1194, 1637) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -10,7 +10,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
const defaultMTU = 1320 // see https://github.com/qdm12/gluetun/issues/1650#issuecomment-1988298206
const defaultMSSFix = defaultMTU - 28 // 28 bytes of IPv4 UDP header size
providerSettings := utils.OpenVPNProviderSettings{
@@ -31,7 +32,8 @@ func (p *Provider) OpenVPNConfig(connection models.Connection,
providerSettings.Ciphers = []string{
openvpn.AES256gcm, openvpn.AES256cbc, openvpn.AES192gcm,
openvpn.AES192cbc, openvpn.AES128gcm, openvpn.AES128cbc,
openvpn.Chacha20Poly1305}
openvpn.Chacha20Poly1305,
}
default:
panic(fmt.Sprintf("openvpn version %q is not implemented", settings.Version))
}

View File

@@ -16,7 +16,8 @@ type Provider struct {
}
func New(storage common.Storage, randSource rand.Source,
client *http.Client) *Provider {
client *http.Client,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -32,7 +32,8 @@ type apiServer struct {
}
func fetchAPI(ctx context.Context, client *http.Client) (
data apiData, err error) {
data apiData, err error,
) {
const url = "https://airvpn.org/api/status/"
request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)

View File

@@ -13,7 +13,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
data, err := fetchAPI(ctx, u.client)
if err != nil {
return nil, fmt.Errorf("fetching API: %w", err)

View File

@@ -2,6 +2,4 @@ package common
import "errors"
var (
ErrPortForwardNotSupported = errors.New("port forwarding not supported")
)
var ErrPortForwardNotSupported = errors.New("port forwarding not supported")

View File

@@ -10,13 +10,12 @@ import (
"github.com/qdm12/gluetun/internal/models"
)
var (
ErrVPNTypeNotSupported = errors.New("VPN type not supported for custom provider")
)
var ErrVPNTypeNotSupported = errors.New("VPN type not supported for custom provider")
// GetConnection gets the connection from the OpenVPN configuration file.
func (p *Provider) GetConnection(selection settings.ServerSelection, _ bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
switch selection.VPN {
case vpn.OpenVPN:
return getOpenVPNConnection(p.extractor, selection)
@@ -29,7 +28,8 @@ func (p *Provider) GetConnection(selection settings.ServerSelection, _ bool) (
func getOpenVPNConnection(extractor Extractor,
selection settings.ServerSelection) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
_, connection, err = extractor.Data(*selection.OpenVPN.ConfFile)
if err != nil {
return connection, fmt.Errorf("extracting connection: %w", err)
@@ -52,7 +52,8 @@ func getOpenVPNConnection(extractor Extractor,
}
func getWireguardConnection(selection settings.ServerSelection) (
connection models.Connection) {
connection models.Connection,
) {
connection = models.Connection{
Type: vpn.Wireguard,
IP: selection.Wireguard.EndpointIP,

View File

@@ -15,7 +15,8 @@ import (
var ErrExtractData = errors.New("failed extracting information from custom configuration file")
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
lines, _, err := p.extractor.Data(*settings.ConfFile)
if err != nil {
// Configuration file is already validated in settings validation in
@@ -30,7 +31,8 @@ func (p *Provider) OpenVPNConfig(connection models.Connection,
}
func modifyConfig(lines []string, connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (modified []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (modified []string) {
// Remove some lines
for _, line := range lines {
switch {

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(443, 443, 0) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
RemoteCertTLS: true,

View File

@@ -15,7 +15,8 @@ type Provider struct {
}
func New(storage common.Storage, randSource rand.Source,
parallelResolver common.ParallelResolver) *Provider {
parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -10,7 +10,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
possibleServers := getPossibleServers()
possibleHosts := possibleServers.hostsSlice()

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
// TODO: Set the default ports for each VPN protocol+network protocol
// combination. If one combination is not supported, set it to `0`.
defaults := utils.NewConnectionDefaults(443, 1194, 51820) //nolint:mnd

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
// TODO: Set the necessary fields in `providerSettings` to
// generate the right OpenVPN configuration file.
//nolint:mnd

View File

@@ -18,7 +18,8 @@ type Provider struct {
// TODO: remove unneeded arguments once the updater is implemented.
func New(storage common.Storage, randSource rand.Source,
updaterWarner common.Warner, client *http.Client,
unzipper common.Unzipper, parallelResolver common.ParallelResolver) *Provider {
unzipper common.Unzipper, parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -8,9 +8,7 @@ import (
"net/http"
)
var (
errHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
)
var errHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
type apiData struct {
Servers []apiServer `json:"servers"`
@@ -26,7 +24,8 @@ type apiServer struct {
}
func fetchAPI(ctx context.Context, client *http.Client) (
data apiData, err error) {
data apiData, err error,
) {
// TODO: adapt this URL and the structures above to match the real
// API models you have.
const url = "https://example.com/servers"

View File

@@ -11,7 +11,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
// FetchServers obtains information for each VPN server
// for the VPN service provider.
//

View File

@@ -15,7 +15,8 @@ type Updater struct {
}
func New(warner common.Warner, unzipper common.Unzipper,
client *http.Client, parallelResolver common.ParallelResolver) *Updater {
client *http.Client, parallelResolver common.ParallelResolver,
) *Updater {
// TODO: remove arguments not used by the updater
return &Updater{
client: client,

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(0, 1195, 0) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
RemoteCertTLS: true,

View File

@@ -16,7 +16,8 @@ type Provider struct {
func New(storage common.Storage, randSource rand.Source,
unzipper common.Unzipper, updaterWarner common.Warner,
parallelResolver common.ParallelResolver) *Provider {
parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -11,7 +11,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
servers = hardcodedServers()
hosts := make([]string, len(servers))

View File

@@ -11,7 +11,8 @@ type Updater struct {
}
func New(unzipper common.Unzipper, warner common.Warner,
parallelResolver common.ParallelResolver) *Updater {
parallelResolver common.ParallelResolver,
) *Updater {
return &Updater{
unzipper: unzipper,
parallelResolver: parallelResolver,

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(4443, 4443, 51820) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
AuthUserPass: true,

View File

@@ -17,7 +17,8 @@ type Provider struct {
func New(storage common.Storage, randSource rand.Source,
client *http.Client, updaterWarner common.Warner,
parallelResolver common.ParallelResolver) *Provider {
parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -19,16 +19,15 @@ type apiServer struct {
hostname string
}
var (
ErrDataMalformed = errors.New("data is malformed")
)
var ErrDataMalformed = errors.New("data is malformed")
const apiURL = "https://support.fastestvpn.com/wp-admin/admin-ajax.php"
// The API URL and requests are shamelessly taken from network operations
// done on the page https://support.fastestvpn.com/vpn-servers/
func fetchAPIServers(ctx context.Context, client *http.Client, protocol string) (
servers []apiServer, err error) {
servers []apiServer, err error,
) {
form := url.Values{
"action": []string{"vpn_servers"},
"protocol": []string{protocol},

View File

@@ -11,7 +11,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
protocols := []string{"ikev2", "tcp", "udp"}
hts := make(hostToServerData)

View File

@@ -13,7 +13,8 @@ type Updater struct {
}
func New(client *http.Client, warner common.Warner,
parallelResolver common.ParallelResolver) *Updater {
parallelResolver common.ParallelResolver,
) *Updater {
return &Updater{
client: client,
parallelResolver: parallelResolver,

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(0, 443, 0) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
RemoteCertTLS: true,

View File

@@ -16,7 +16,8 @@ type Provider struct {
func New(storage common.Storage, randSource rand.Source,
unzipper common.Unzipper, updaterWarner common.Warner,
parallelResolver common.ParallelResolver) *Provider {
parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -12,7 +12,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
const url = "https://support.vyprvpn.com/hc/article_attachments/360052617332/Vypr_OpenVPN_20200320.zip"
contents, err := u.unzipper.FetchAndExtract(ctx, url)
if err != nil {

View File

@@ -11,7 +11,8 @@ type Updater struct {
}
func New(unzipper common.Unzipper, warner common.Warner,
parallelResolver common.ParallelResolver) *Updater {
parallelResolver common.ParallelResolver,
) *Updater {
return &Updater{
unzipper: unzipper,
parallelResolver: parallelResolver,

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(8080, 553, 0) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
AuthUserPass: true,

View File

@@ -17,7 +17,8 @@ type Provider struct {
func New(storage common.Storage, randSource rand.Source,
client *http.Client, updaterWarner common.Warner,
parallelResolver common.ParallelResolver) *Provider {
parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -1,7 +1,8 @@
package updater
func getUniqueHosts(tcpHostToURL, udpHostToURL map[string]string) (
hosts []string) {
hosts []string,
) {
uniqueHosts := make(map[string]struct{}, len(tcpHostToURL))
for host := range tcpHostToURL {
uniqueHosts[host] = struct{}{}

View File

@@ -9,7 +9,8 @@ import (
)
func getAllHostToURL(ctx context.Context, client *http.Client) (
tcpHostToURL, udpHostToURL map[string]string, err error) {
tcpHostToURL, udpHostToURL map[string]string, err error,
) {
tcpHostToURL, err = getHostToURL(ctx, client, "TCP")
if err != nil {
return nil, nil, err
@@ -24,7 +25,8 @@ func getAllHostToURL(ctx context.Context, client *http.Client) (
}
func getHostToURL(ctx context.Context, client *http.Client, protocol string) (
hostToURL map[string]string, err error) {
hostToURL map[string]string, err error,
) {
const baseURL = "https://vpn.hidemyass.com/vpn-config"
indexURL := baseURL + "/" + strings.ToUpper(protocol) + "/"

View File

@@ -11,7 +11,8 @@ import (
var indexOpenvpnLinksRegex = regexp.MustCompile(`<a[ ]+href=".+\.ovpn">.+\.ovpn</a>`)
func fetchIndex(ctx context.Context, client *http.Client, indexURL string) (
openvpnURLs []string, err error) {
openvpnURLs []string, err error,
) {
request, err := http.NewRequestWithContext(ctx, http.MethodGet, indexURL, nil)
if err != nil {
return nil, err

View File

@@ -11,7 +11,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
tcpHostToURL, udpHostToURL, err := getAllHostToURL(ctx, u.client)
if err != nil {
return nil, err

View File

@@ -13,7 +13,8 @@ type Updater struct {
}
func New(client *http.Client, warner common.Warner,
parallelResolver common.ParallelResolver) *Updater {
parallelResolver common.ParallelResolver,
) *Updater {
return &Updater{
client: client,
parallelResolver: parallelResolver,

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(0, 443, 0) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
providerSettings := utils.OpenVPNProviderSettings{
AuthUserPass: true,
Ciphers: []string{

View File

@@ -16,7 +16,8 @@ type Provider struct {
func New(storage common.Storage, randSource rand.Source,
unzipper common.Unzipper, updaterWarner common.Warner,
parallelResolver common.ParallelResolver) *Provider {
parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -12,7 +12,8 @@ import (
var errCountryCodeUnknown = errors.New("country code is unknown")
func parseFilename(fileName, hostname string, titleCaser cases.Caser) (
country, city string, err error) {
country, city string, err error,
) {
const prefix = "ipvanish-"
s := strings.TrimPrefix(fileName, prefix)

View File

@@ -14,7 +14,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
const url = "https://configs.ipvanish.com/configs/configs.zip"
contents, err := u.unzipper.FetchAndExtract(ctx, url)
if err != nil {

View File

@@ -11,7 +11,8 @@ type Updater struct {
}
func New(unzipper common.Unzipper, warner common.Warner,
parallelResolver common.ParallelResolver) *Updater {
parallelResolver common.ParallelResolver,
) *Updater {
return &Updater{
unzipper: unzipper,
warner: warner,

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(443, 1194, 58237) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
AuthUserPass: true,

View File

@@ -17,7 +17,8 @@ type Provider struct {
func New(storage common.Storage, randSource rand.Source,
client *http.Client, updaterWarner common.Warner,
parallelResolver common.ParallelResolver) *Provider {
parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -8,9 +8,7 @@ import (
"net/http"
)
var (
errHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
)
var errHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
type apiData struct {
Servers []apiServer `json:"servers"`
@@ -31,7 +29,8 @@ type apiHostnames struct {
}
func fetchAPI(ctx context.Context, client *http.Client) (
data apiData, err error) {
data apiData, err error,
) {
const url = "https://api.ivpn.net/v4/servers/stats"
request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)

View File

@@ -12,7 +12,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
data, err := fetchAPI(ctx, u.client)
if err != nil {
return nil, fmt.Errorf("fetching API: %w", err)

View File

@@ -116,17 +116,23 @@ func Test_Updater_GetServers(t *testing.T) {
},
resolveWarnings: []string{"resolve warning"},
servers: []models.Server{
{VPN: vpn.OpenVPN, Country: "Country1",
{
VPN: vpn.OpenVPN, Country: "Country1",
City: "City A", Hostname: "hosta", TCP: true, UDP: true,
IPs: []netip.Addr{netip.AddrFrom4([4]byte{1, 1, 1, 1}), netip.AddrFrom4([4]byte{2, 2, 2, 2})}},
{VPN: vpn.OpenVPN, Country: "Country2",
IPs: []netip.Addr{netip.AddrFrom4([4]byte{1, 1, 1, 1}), netip.AddrFrom4([4]byte{2, 2, 2, 2})},
},
{
VPN: vpn.OpenVPN, Country: "Country2",
City: "City B", Hostname: "hostb", TCP: true, UDP: true,
IPs: []netip.Addr{netip.AddrFrom4([4]byte{3, 3, 3, 3}), netip.AddrFrom4([4]byte{4, 4, 4, 4})}},
{VPN: vpn.Wireguard,
IPs: []netip.Addr{netip.AddrFrom4([4]byte{3, 3, 3, 3}), netip.AddrFrom4([4]byte{4, 4, 4, 4})},
},
{
VPN: vpn.Wireguard,
Country: "Country3", City: "City C",
Hostname: "hostc",
WgPubKey: "xyz",
IPs: []netip.Addr{netip.AddrFrom4([4]byte{5, 5, 5, 5}), netip.AddrFrom4([4]byte{6, 6, 6, 6})}},
IPs: []netip.Addr{netip.AddrFrom4([4]byte{5, 5, 5, 5}), netip.AddrFrom4([4]byte{6, 6, 6, 6})},
},
},
},
}

View File

@@ -13,7 +13,8 @@ type Updater struct {
}
func New(client *http.Client, warner common.Warner,
parallelResolver common.ParallelResolver) *Updater {
parallelResolver common.ParallelResolver,
) *Updater {
return &Updater{
client: client,
parallelResolver: parallelResolver,

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(443, 1194, 51820) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
AuthUserPass: true,

View File

@@ -16,7 +16,8 @@ type Provider struct {
}
func New(storage common.Storage, randSource rand.Source,
client *http.Client) *Provider {
client *http.Client,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -10,7 +10,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
data, err := fetchAPI(ctx, u.client)
if err != nil {
return nil, err

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(443, 1194, 51820) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
AuthUserPass: true,

View File

@@ -16,7 +16,8 @@ type Provider struct {
}
func New(storage common.Storage, randSource rand.Source,
client *http.Client, updaterWarner common.Warner) *Provider {
client *http.Client, updaterWarner common.Warner,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -8,12 +8,11 @@ import (
"net/http"
)
var (
ErrHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
)
var ErrHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
func fetchAPI(ctx context.Context, client *http.Client,
limit uint) (data serversData, err error) {
limit uint,
) (data serversData, err error) {
url := "https://api.nordvpn.com/v2/servers"
url += fmt.Sprintf("?limit=%d", limit) // 0 means no limit

View File

@@ -175,7 +175,8 @@ var (
// wireguardPublicKey returns the Wireguard public key for the server.
func (s *serverData) wireguardPublicKey(technologies map[uint32]technologyData) (
wgPubKey string, err error) {
wgPubKey string, err error,
) {
for _, technology := range s.Technologies {
data, ok := technologies[technology.ID]
if !ok || data.Identifier != "wireguard_udp" {

View File

@@ -11,12 +11,11 @@ import (
"github.com/qdm12/gluetun/internal/provider/common"
)
var (
ErrNotIPv4 = errors.New("IP address is not IPv4")
)
var ErrNotIPv4 = errors.New("IP address is not IPv4")
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
const limit = 0
data, err := fetchAPI(ctx, u.client, limit)
if err != nil {
@@ -47,7 +46,8 @@ func (u *Updater) FetchServers(ctx context.Context, minServers int) (
func extractServers(jsonServer serverData, groups map[uint32]groupData,
services map[uint32]serviceData, locations map[uint32]locationData,
technologies map[uint32]technologyData) (servers []models.Server,
warnings []string) {
warnings []string,
) {
ignoreReason := ""
switch {
case jsonServer.Status != "online":

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(443, 443, 0) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
AuthUserPass: true,

View File

@@ -9,7 +9,8 @@ import (
// PortForward calculates and returns the VPN server side ports forwarded.
func (p *Provider) PortForward(_ context.Context,
objects utils.PortForwardObjects) (ports []uint16, err error) {
objects utils.PortForwardObjects,
) (ports []uint16, err error) {
if !objects.InternalIP.IsValid() {
panic("internal ip is not set")
}
@@ -18,7 +19,8 @@ func (p *Provider) PortForward(_ context.Context,
}
func (p *Provider) KeepPortForward(ctx context.Context,
_ utils.PortForwardObjects) (err error) {
_ utils.PortForwardObjects,
) (err error) {
<-ctx.Done()
return ctx.Err()
}

View File

@@ -15,7 +15,8 @@ type Provider struct {
}
func New(storage common.Storage, randSource rand.Source,
unzipper common.Unzipper, updaterWarner common.Warner) *Provider {
unzipper common.Unzipper, updaterWarner common.Warner,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -13,7 +13,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
zipURL := url.URL{
Scheme: "https",
Host: "www.perfect-privacy.com",
@@ -53,7 +54,8 @@ func (u *Updater) FetchServers(ctx context.Context, minServers int) (
}
func addServerFromOvpn(cts cityToServer,
fileName string, content []byte) (err error) {
fileName string, content []byte,
) (err error) {
if !strings.HasSuffix(fileName, ".conf") {
return nil // not an OpenVPN file
}

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(0, 1194, 0) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
AuthUserPass: true,

View File

@@ -17,7 +17,8 @@ type Provider struct {
func New(storage common.Storage, randSource rand.Source,
ipFetcher common.IPFetcher, unzipper common.Unzipper,
updaterWarner common.Warner,
parallelResolver common.ParallelResolver) *Provider {
parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -12,7 +12,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
const url = "https://privadovpn.com/apps/ovpn_configs.zip"
contents, err := u.unzipper.FetchAndExtract(ctx, url)
if err != nil {

View File

@@ -12,7 +12,8 @@ type Updater struct {
}
func New(ipFetcher common.IPFetcher, unzipper common.Unzipper,
warner common.Warner, parallelResolver common.ParallelResolver) *Updater {
warner common.Warner, parallelResolver common.ParallelResolver,
) *Updater {
return &Updater{
ipFetcher: ipFetcher,
unzipper: unzipper,

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
// Set port defaults depending on encryption preset.
var defaults utils.ConnectionDefaults
switch *selection.OpenVPN.PIAEncPreset {

View File

@@ -9,7 +9,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
providerSettings := utils.OpenVPNProviderSettings{
RemoteCertTLS: true,
RenegDisabled: true,

View File

@@ -21,13 +21,12 @@ import (
"github.com/qdm12/gluetun/internal/provider/utils"
)
var (
ErrServerNameNotFound = errors.New("server name not found in servers")
)
var ErrServerNameNotFound = errors.New("server name not found in servers")
// PortForward obtains a VPN server side port forwarded from PIA.
func (p *Provider) PortForward(ctx context.Context,
objects utils.PortForwardObjects) (ports []uint16, err error) {
objects utils.PortForwardObjects,
) (ports []uint16, err error) {
switch {
case objects.ServerName == "":
panic("server name cannot be empty")
@@ -88,12 +87,11 @@ func (p *Provider) PortForward(ctx context.Context,
return []uint16{data.Port}, nil
}
var (
ErrPortForwardedExpired = errors.New("port forwarded data expired")
)
var ErrPortForwardedExpired = errors.New("port forwarded data expired")
func (p *Provider) KeepPortForward(ctx context.Context,
objects utils.PortForwardObjects) (err error) {
objects utils.PortForwardObjects,
) (err error) {
switch {
case objects.ServerName == "":
panic("server name cannot be empty")
@@ -154,7 +152,8 @@ func buildAPIIPAddress(gateway netip.Addr) (api netip.Addr) {
}
func refreshPIAPortForwardData(ctx context.Context, client, privateIPClient *http.Client,
apiIP netip.Addr, portForwardPath, username, password string) (data piaPortForwardData, err error) {
apiIP netip.Addr, portForwardPath, username, password string,
) (data piaPortForwardData, err error) {
data.Token, err = fetchToken(ctx, client, username, password)
if err != nil {
return data, fmt.Errorf("fetching token: %w", err)
@@ -203,7 +202,7 @@ func readPIAPortForwardData(portForwardPath string) (data piaPortForwardData, er
}
func writePIAPortForwardData(portForwardPath string, data piaPortForwardData) (err error) {
const permission = fs.FileMode(0644)
const permission = fs.FileMode(0o644)
file, err := os.OpenFile(portForwardPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, permission)
if err != nil {
return err
@@ -251,12 +250,11 @@ func packPayload(port uint16, token string, expiration time.Time) (payload strin
return payload, nil
}
var (
errEmptyToken = errors.New("token received is empty")
)
var errEmptyToken = errors.New("token received is empty")
func fetchToken(ctx context.Context, client *http.Client,
username, password string) (token string, err error) {
username, password string,
) (token string, err error) {
errSubstitutions := map[string]string{
url.QueryEscape(username): "<username>",
url.QueryEscape(password): "<password>",
@@ -302,7 +300,8 @@ func fetchToken(ctx context.Context, client *http.Client,
}
func fetchPortForwardData(ctx context.Context, client *http.Client, apiIP netip.Addr, token string) (
port uint16, signature string, expiration time.Time, err error) {
port uint16, signature string, expiration time.Time, err error,
) {
errSubstitutions := map[string]string{url.QueryEscape(token): "<token>"}
queryParams := make(url.Values)
@@ -351,9 +350,7 @@ func fetchPortForwardData(ctx context.Context, client *http.Client, apiIP netip.
return port, data.Signature, expiration, err
}
var (
ErrBadResponse = errors.New("bad response received")
)
var ErrBadResponse = errors.New("bad response received")
func bindPort(ctx context.Context, client *http.Client, apiIPAddress netip.Addr, data piaPortForwardData) (err error) {
payload, err := packPayload(data.Port, data.Token, data.Expiration)

View File

@@ -20,7 +20,8 @@ type Provider struct {
}
func New(storage common.Storage, randSource rand.Source,
timeNow func() time.Time, client *http.Client) *Provider {
timeNow func() time.Time, client *http.Client,
) *Provider {
const jsonPortForwardPath = "/gluetun/piaportforward.json"
return &Provider{
storage: storage,

View File

@@ -11,9 +11,7 @@ import (
"net/netip"
)
var (
ErrHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
)
var ErrHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
type apiData struct {
Regions []regionData `json:"regions"`
@@ -36,7 +34,8 @@ type serverData struct {
}
func fetchAPI(ctx context.Context, client *http.Client) (
data apiData, err error) {
data apiData, err error,
) {
const url = "https://serverlist.piaservers.net/vpninfo/servers/v6"
request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)

View File

@@ -10,7 +10,8 @@ import (
type nameToServer map[string]models.Server
func (nts nameToServer) add(name, hostname, region string,
tcp, udp, portForward bool, ip netip.Addr) (change bool) {
tcp, udp, portForward bool, ip netip.Addr,
) (change bool) {
server, ok := nts[name]
if !ok {
change = true

View File

@@ -11,7 +11,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
nts := make(nameToServer)
noChangeCounter := 0

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(443, 1194, 0) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
providerSettings := utils.OpenVPNProviderSettings{
RemoteCertTLS: true,
AuthUserPass: true,

View File

@@ -14,18 +14,15 @@ import (
"github.com/qdm12/gluetun/internal/provider/utils"
)
var (
regexPort = regexp.MustCompile(`[1-9][0-9]{0,4}`)
)
var regexPort = regexp.MustCompile(`[1-9][0-9]{0,4}`)
var (
ErrPortForwardedNotFound = errors.New("port forwarded not found")
)
var ErrPortForwardedNotFound = errors.New("port forwarded not found")
// PortForward obtains a VPN server side port forwarded from the PrivateVPN API.
// It returns 0 if all ports are to forwarded on a dedicated server IP.
func (p *Provider) PortForward(ctx context.Context, objects utils.PortForwardObjects) (
ports []uint16, err error) {
ports []uint16, err error,
) {
url := "https://connect.pvdatanet.com/v3/Api/port?ip[]=" + objects.InternalIP.String()
request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
if err != nil {
@@ -75,7 +72,8 @@ func (p *Provider) PortForward(ctx context.Context, objects utils.PortForwardObj
}
func (p *Provider) KeepPortForward(ctx context.Context,
_ utils.PortForwardObjects) (err error) {
_ utils.PortForwardObjects,
) (err error) {
<-ctx.Done()
return ctx.Err()
}

View File

@@ -16,7 +16,8 @@ type Provider struct {
func New(storage common.Storage, randSource rand.Source,
unzipper common.Unzipper, updaterWarner common.Warner,
parallelResolver common.ParallelResolver) *Provider {
parallelResolver common.ParallelResolver,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -3,7 +3,8 @@ package updater
import "strings"
func codeToCountry(countryCode string, countryCodes map[string]string) (
country string, warning string) {
country string, warning string,
) {
countryCode = strings.ToLower(countryCode)
country, ok := countryCodes[countryCode]
if !ok {

View File

@@ -7,9 +7,7 @@ import (
"strings"
)
var (
trailingNumber = regexp.MustCompile(` [0-9]+$`)
)
var trailingNumber = regexp.MustCompile(` [0-9]+$`)
var (
errBadPrefix = errors.New("bad prefix in file name")

View File

@@ -14,7 +14,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
const url = "https://privatevpn.com/client/PrivateVPN-TUN.zip"
contents, err := u.unzipper.FetchAndExtract(ctx, url)
if err != nil {

View File

@@ -11,7 +11,8 @@ type Updater struct {
}
func New(unzipper common.Unzipper, warner common.Warner,
parallelResolver common.ParallelResolver) *Updater {
parallelResolver common.ParallelResolver,
) *Updater {
return &Updater{
unzipper: unzipper,
parallelResolver: parallelResolver,

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(443, 1194, 51820) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

View File

@@ -8,7 +8,8 @@ import (
)
func (p *Provider) OpenVPNConfig(connection models.Connection,
settings settings.OpenVPN, ipv6Supported bool) (lines []string) {
settings settings.OpenVPN, ipv6Supported bool,
) (lines []string) {
//nolint:mnd
providerSettings := utils.OpenVPNProviderSettings{
RemoteCertTLS: true,

View File

@@ -11,13 +11,12 @@ import (
"github.com/qdm12/gluetun/internal/provider/utils"
)
var (
ErrServerPortForwardNotSupported = errors.New("server does not support port forwarding")
)
var ErrServerPortForwardNotSupported = errors.New("server does not support port forwarding")
// PortForward obtains a VPN server side port forwarded from ProtonVPN gateway.
func (p *Provider) PortForward(ctx context.Context, objects utils.PortForwardObjects) (
ports []uint16, err error) {
ports []uint16, err error,
) {
if !objects.CanPortForward {
return nil, fmt.Errorf("%w", ErrServerPortForwardNotSupported)
}
@@ -38,17 +37,15 @@ func (p *Provider) PortForward(ctx context.Context, objects utils.PortForwardObj
const internalPort, externalPort = 0, 1
const lifetime = 60 * time.Second
_, _, assignedUDPExternalPort, assignedLifetime, err :=
client.AddPortMapping(ctx, objects.Gateway, "udp",
internalPort, externalPort, lifetime)
_, _, assignedUDPExternalPort, assignedLifetime, err := client.AddPortMapping(ctx, objects.Gateway, "udp",
internalPort, externalPort, lifetime)
if err != nil {
return nil, fmt.Errorf("adding UDP port mapping: %w", err)
}
checkLifetime(logger, "UDP", lifetime, assignedLifetime)
_, _, assignedTCPExternalPort, assignedLifetime, err :=
client.AddPortMapping(ctx, objects.Gateway, "tcp",
internalPort, externalPort, lifetime)
_, _, assignedTCPExternalPort, assignedLifetime, err := client.AddPortMapping(ctx, objects.Gateway, "tcp",
internalPort, externalPort, lifetime)
if err != nil {
return nil, fmt.Errorf("adding TCP port mapping: %w", err)
}
@@ -62,7 +59,8 @@ func (p *Provider) PortForward(ctx context.Context, objects utils.PortForwardObj
}
func checkLifetime(logger utils.Logger, protocol string,
requested, actual time.Duration) {
requested, actual time.Duration,
) {
if requested != actual {
logger.Warn(fmt.Sprintf("assigned %s port lifetime %s differs"+
" from requested lifetime %s", strings.ToUpper(protocol),
@@ -80,7 +78,8 @@ func checkExternalPorts(logger utils.Logger, udpPort, tcpPort uint16) {
var ErrExternalPortChanged = errors.New("external port changed")
func (p *Provider) KeepPortForward(ctx context.Context,
objects utils.PortForwardObjects) (err error) {
objects utils.PortForwardObjects,
) (err error) {
client := natpmp.New()
const refreshTimeout = 45 * time.Second
timer := time.NewTimer(refreshTimeout)
@@ -98,9 +97,8 @@ func (p *Provider) KeepPortForward(ctx context.Context,
const lifetime = 60 * time.Second
for _, networkProtocol := range networkProtocols {
_, _, assignedExternalPort, assignedLiftetime, err :=
client.AddPortMapping(ctx, objects.Gateway, networkProtocol,
internalPort, p.portForwarded, lifetime)
_, _, assignedExternalPort, assignedLiftetime, err := client.AddPortMapping(ctx, objects.Gateway, networkProtocol,
internalPort, p.portForwarded, lifetime)
if err != nil {
return fmt.Errorf("adding port mapping: %w", err)
}

View File

@@ -17,7 +17,8 @@ type Provider struct {
}
func New(storage common.Storage, randSource rand.Source,
client *http.Client, updaterWarner common.Warner) *Provider {
client *http.Client, updaterWarner common.Warner,
) *Provider {
return &Provider{
storage: storage,
randSource: randSource,

View File

@@ -9,9 +9,7 @@ import (
"net/netip"
)
var (
ErrHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
)
var ErrHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
type apiData struct {
LogicalServers []logicalServer `json:"LogicalServers"`
@@ -36,7 +34,8 @@ type physicalServer struct {
}
func fetchAPI(ctx context.Context, client *http.Client) (
data apiData, err error) {
data apiData, err error,
) {
const url = "https://api.protonmail.ch/vpn/logicals"
request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)

View File

@@ -3,7 +3,8 @@ package updater
import "strings"
func codeToCountry(countryCode string, countryCodes map[string]string) (
country string, warning string) {
country string, warning string,
) {
countryCode = strings.ToLower(countryCode)
country, ok := countryCodes[countryCode]
if !ok {

View File

@@ -17,7 +17,8 @@ type features struct {
}
func (its ipToServers) add(country, region, city, name, hostname, wgPubKey string,
free bool, entryIP netip.Addr, features features) {
free bool, entryIP netip.Addr, features features,
) {
key := entryIP.String()
servers, ok := its[key]

View File

@@ -11,7 +11,8 @@ import (
)
func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers []models.Server, err error,
) {
data, err := fetchAPI(ctx, u.client)
if err != nil {
return nil, err

View File

@@ -54,7 +54,8 @@ type Extractor interface {
func NewProviders(storage Storage, timeNow func() time.Time,
updaterWarner common.Warner, client *http.Client, unzipper common.Unzipper,
parallelResolver common.ParallelResolver, ipFetcher common.IPFetcher,
extractor custom.Extractor) *Providers {
extractor custom.Extractor,
) *Providers {
randSource := rand.NewSource(timeNow().UnixNano())
//nolint:lll

View File

@@ -7,7 +7,8 @@ import (
)
func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) (
connection models.Connection, err error) {
connection models.Connection, err error,
) {
defaults := utils.NewConnectionDefaults(80, 53, 0) //nolint:mnd
return utils.GetConnection(p.Name(),
p.storage, selection, defaults, ipv6Supported, p.randSource)

Some files were not shown because too many files have changed in this diff Show More