From c0621bf381a5436b36affa7784152dbd60f8560d Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Thu, 21 Mar 2024 09:48:02 +0000 Subject: [PATCH] chore(lint): upgrade linter to v1.56.2 --- .golangci.yml | 13 +++++++++++++ Dockerfile | 2 +- internal/firewall/enable.go | 3 +-- internal/firewall/logger.go | 10 ++++++++++ internal/firewall/outboundsubnets.go | 6 ++---- internal/firewall/support_test.go | 6 +++--- internal/models/servers.go | 2 +- internal/provider/ipvanish/updater/servers_test.go | 6 +++--- internal/provider/ivpn/updater/servers_test.go | 4 ++-- internal/server/dns.go | 4 ++-- internal/server/helpers.go | 13 +++++++++++++ internal/server/openvpn.go | 8 ++++---- internal/server/publicip.go | 4 ++-- internal/server/updater.go | 4 ++-- internal/server/vpn.go | 6 +++--- internal/storage/helpers.go | 8 ++++++++ internal/storage/read.go | 3 +-- internal/storage/servers.go | 3 +-- internal/updater/resolver/net.go | 2 +- internal/wireguard/address_test.go | 2 +- 20 files changed, 74 insertions(+), 35 deletions(-) create mode 100644 internal/server/helpers.go create mode 100644 internal/storage/helpers.go diff --git a/.golangci.yml b/.golangci.yml index 9faffdfa..b2e8e152 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -9,6 +9,7 @@ issues: - dupl - goerr113 - containedctx + - goconst - path: "internal\\/server\\/.+\\.go" linters: - dupl @@ -33,6 +34,18 @@ issues: text: "newCipherDESCBCBlock returns interface \\(github\\.com\\/youmark\\/pkcs8\\.Cipher\\)" linters: - ireturn + - path: "internal\\/firewall\\/.*\\.go" + text: "string `-i ` has [1-9][0-9]* occurrences, make it a constant" + linters: + - goconst + - path: "internal\\/provider\\/ipvanish\\/updater\\/servers.go" + text: "string ` in ` has 3 occurrences, make it a constant" + linters: + - goconst + - path: "internal\\/vpn\\/portforward.go" + text: 'directive `//nolint:ireturn` is unused for linter "ireturn"' + linters: + - nolintlint linters: enable: diff --git a/Dockerfile b/Dockerfile index a58c8a1a..694e3e76 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ ARG ALPINE_VERSION=3.18 ARG GO_ALPINE_VERSION=3.18 ARG GO_VERSION=1.21 ARG XCPUTRANSLATE_VERSION=v0.6.0 -ARG GOLANGCI_LINT_VERSION=v1.54.1 +ARG GOLANGCI_LINT_VERSION=v1.56.2 ARG MOCKGEN_VERSION=v1.6.0 ARG BUILDPLATFORM=linux/amd64 diff --git a/internal/firewall/enable.go b/internal/firewall/enable.go index 6d3e4b0a..415076bc 100644 --- a/internal/firewall/enable.go +++ b/internal/firewall/enable.go @@ -180,8 +180,7 @@ func (c *Config) allowOutboundSubnets(ctx context.Context) (err error) { } if !firewallUpdated { - c.logger.Info(fmt.Sprintf("ignoring subnet %s which has "+ - "no default route matching its family", subnet)) + c.logIgnoredSubnetFamily(subnet) } } return nil diff --git a/internal/firewall/logger.go b/internal/firewall/logger.go index 8c79d4db..02217766 100644 --- a/internal/firewall/logger.go +++ b/internal/firewall/logger.go @@ -1,7 +1,17 @@ package firewall +import ( + "fmt" + "net/netip" +) + type Logger interface { Debug(s string) Info(s string) Error(s string) } + +func (c *Config) logIgnoredSubnetFamily(subnet netip.Prefix) { + c.logger.Info(fmt.Sprintf("ignoring subnet %s which has "+ + "no default route matching its family", subnet)) +} diff --git a/internal/firewall/outboundsubnets.go b/internal/firewall/outboundsubnets.go index 7288eea6..1d2406d7 100644 --- a/internal/firewall/outboundsubnets.go +++ b/internal/firewall/outboundsubnets.go @@ -57,8 +57,7 @@ func (c *Config) removeOutboundSubnets(ctx context.Context, subnets []netip.Pref } if !firewallUpdated { - c.logger.Info(fmt.Sprintf("ignoring subnet %s which has "+ - "no default route matching its family", subNet)) + c.logIgnoredSubnetFamily(subNet) continue } c.outboundSubnets = subnet.RemoveSubnetFromSubnets(c.outboundSubnets, subNet) @@ -86,8 +85,7 @@ func (c *Config) addOutboundSubnets(ctx context.Context, subnets []netip.Prefix) } if !firewallUpdated { - c.logger.Info(fmt.Sprintf("ignoring subnet %s which has "+ - "no default route matching its family", subnet)) + c.logIgnoredSubnetFamily(subnet) continue } c.outboundSubnets = append(c.outboundSubnets, subnet) diff --git a/internal/firewall/support_test.go b/internal/firewall/support_test.go index 25128ec9..b10f5924 100644 --- a/internal/firewall/support_test.go +++ b/internal/firewall/support_test.go @@ -216,7 +216,7 @@ func Test_testIptablesPath(t *testing.T) { runner.EXPECT().Run(newAppendTestRuleMatcher(path)).Return("", nil) runner.EXPECT().Run(newDeleteTestRuleMatcher(path)).Return("", nil) runner.EXPECT().Run(newListInputRulesMatcher(path)). - Return("\nChain INPUT (policy "+inputPolicy+")\nxx\n", nil) + Return("\nChain INPUT (policy "+inputPolicy+")\nAA\n", nil) runner.EXPECT().Run(newSetPolicyMatcher(path, inputPolicy)). Return("Permission denied (you must be root)", errDummy) return runner @@ -229,7 +229,7 @@ func Test_testIptablesPath(t *testing.T) { runner.EXPECT().Run(newAppendTestRuleMatcher(path)).Return("", nil) runner.EXPECT().Run(newDeleteTestRuleMatcher(path)).Return("", nil) runner.EXPECT().Run(newListInputRulesMatcher(path)). - Return("\nChain INPUT (policy "+inputPolicy+")\nxx\n", nil) + Return("\nChain INPUT (policy "+inputPolicy+")\nBB\n", nil) runner.EXPECT().Run(newSetPolicyMatcher(path, inputPolicy)). Return("some output", errDummy) return runner @@ -242,7 +242,7 @@ func Test_testIptablesPath(t *testing.T) { runner.EXPECT().Run(newAppendTestRuleMatcher(path)).Return("", nil) runner.EXPECT().Run(newDeleteTestRuleMatcher(path)).Return("", nil) runner.EXPECT().Run(newListInputRulesMatcher(path)). - Return("\nChain INPUT (policy "+inputPolicy+")\nxx\n", nil) + Return("\nChain INPUT (policy "+inputPolicy+")\nCC\n", nil) runner.EXPECT().Run(newSetPolicyMatcher(path, inputPolicy)). Return("some output", nil) return runner diff --git a/internal/models/servers.go b/internal/models/servers.go index c87a5fa5..7d5db0dd 100644 --- a/internal/models/servers.go +++ b/internal/models/servers.go @@ -11,7 +11,7 @@ import ( "github.com/qdm12/gluetun/internal/constants/providers" ) -type AllServers struct { //nolint:musttag +type AllServers struct { Version uint16 // used for migration of the top level scheme ProviderToServers map[string]Servers } diff --git a/internal/provider/ipvanish/updater/servers_test.go b/internal/provider/ipvanish/updater/servers_test.go index a12d5dd7..71024001 100644 --- a/internal/provider/ipvanish/updater/servers_test.go +++ b/internal/provider/ipvanish/updater/servers_test.go @@ -41,19 +41,19 @@ func Test_Updater_GetServers(t *testing.T) { err error }{ "unzipper error": { - warnerBuilder: func(ctrl *gomock.Controller) common.Warner { return nil }, + warnerBuilder: func(_ *gomock.Controller) common.Warner { return nil }, unzipErr: errors.New("dummy"), err: errors.New("dummy"), }, "not enough unzip contents": { minServers: 1, - warnerBuilder: func(ctrl *gomock.Controller) common.Warner { return nil }, + warnerBuilder: func(_ *gomock.Controller) common.Warner { return nil }, unzipContents: map[string][]byte{}, err: errors.New("not enough servers found: 0 and expected at least 1"), }, "no openvpn file": { minServers: 1, - warnerBuilder: func(ctrl *gomock.Controller) common.Warner { return nil }, + warnerBuilder: func(_ *gomock.Controller) common.Warner { return nil }, unzipContents: map[string][]byte{"somefile.txt": {}}, err: errors.New("not enough servers found: 0 and expected at least 1"), }, diff --git a/internal/provider/ivpn/updater/servers_test.go b/internal/provider/ivpn/updater/servers_test.go index 6bab0365..9bf525bb 100644 --- a/internal/provider/ivpn/updater/servers_test.go +++ b/internal/provider/ivpn/updater/servers_test.go @@ -45,7 +45,7 @@ func Test_Updater_GetServers(t *testing.T) { err error }{ "http response error": { - warnerBuilder: func(ctrl *gomock.Controller) common.Warner { return nil }, + warnerBuilder: func(_ *gomock.Controller) common.Warner { return nil }, responseStatus: http.StatusNoContent, err: errors.New("fetching API: HTTP status code not OK: 204 No Content"), }, @@ -77,7 +77,7 @@ func Test_Updater_GetServers(t *testing.T) { }, "not enough servers": { minServers: 2, - warnerBuilder: func(ctrl *gomock.Controller) common.Warner { return nil }, + warnerBuilder: func(_ *gomock.Controller) common.Warner { return nil }, responseBody: `{"servers":[ {"hostnames":{"openvpn":"hosta"}} ]}`, diff --git a/internal/server/dns.go b/internal/server/dns.go index da453714..0aa51ecd 100644 --- a/internal/server/dns.go +++ b/internal/server/dns.go @@ -32,10 +32,10 @@ func (h *dnsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { case http.MethodPut: h.setStatus(w, r) default: - http.Error(w, "method "+r.Method+" not supported", http.StatusBadRequest) + errMethodNotSupported(w, r.Method) } default: - http.Error(w, "route "+r.RequestURI+" not supported", http.StatusBadRequest) + errRouteNotSupported(w, r.RequestURI) } } diff --git a/internal/server/helpers.go b/internal/server/helpers.go new file mode 100644 index 00000000..01fe69de --- /dev/null +++ b/internal/server/helpers.go @@ -0,0 +1,13 @@ +package server + +import ( + "net/http" +) + +func errMethodNotSupported(w http.ResponseWriter, method string) { + http.Error(w, "method "+method+" not supported", http.StatusBadRequest) +} + +func errRouteNotSupported(w http.ResponseWriter, route string) { + http.Error(w, "route "+route+" not supported", http.StatusBadRequest) +} diff --git a/internal/server/openvpn.go b/internal/server/openvpn.go index 42369a02..1224e56c 100644 --- a/internal/server/openvpn.go +++ b/internal/server/openvpn.go @@ -34,24 +34,24 @@ func (h *openvpnHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { case http.MethodPut: h.setStatus(w, r) default: - http.Error(w, "method "+r.Method+" not supported", http.StatusBadRequest) + errMethodNotSupported(w, r.Method) } case "/settings": switch r.Method { case http.MethodGet: h.getSettings(w) default: - http.Error(w, "method "+r.Method+" not supported", http.StatusBadRequest) + errMethodNotSupported(w, r.Method) } case "/portforwarded": switch r.Method { case http.MethodGet: h.getPortForwarded(w) default: - http.Error(w, "method "+r.Method+" not supported", http.StatusBadRequest) + errMethodNotSupported(w, r.Method) } default: - http.Error(w, "route "+r.RequestURI+" not supported", http.StatusBadRequest) + errRouteNotSupported(w, r.RequestURI) } } diff --git a/internal/server/publicip.go b/internal/server/publicip.go index 8e60f609..0a9567b8 100644 --- a/internal/server/publicip.go +++ b/internal/server/publicip.go @@ -26,10 +26,10 @@ func (h *publicIPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { case http.MethodGet: h.getPublicIP(w) default: - http.Error(w, "method "+r.Method+" not supported", http.StatusBadRequest) + errMethodNotSupported(w, r.Method) } default: - http.Error(w, "route "+r.RequestURI+" not supported", http.StatusBadRequest) + errRouteNotSupported(w, r.RequestURI) } } diff --git a/internal/server/updater.go b/internal/server/updater.go index b0cb0a6f..2036fa1e 100644 --- a/internal/server/updater.go +++ b/internal/server/updater.go @@ -44,10 +44,10 @@ func (h *updaterHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { case http.MethodPut: h.setStatus(w, r) default: - http.Error(w, "method "+r.Method+" not supported", http.StatusBadRequest) + errMethodNotSupported(w, r.Method) } default: - http.Error(w, "route "+r.RequestURI+" not supported", http.StatusBadRequest) + errRouteNotSupported(w, r.RequestURI) } } diff --git a/internal/server/vpn.go b/internal/server/vpn.go index e5a35588..7e4aaa0d 100644 --- a/internal/server/vpn.go +++ b/internal/server/vpn.go @@ -38,7 +38,7 @@ func (h *vpnHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { case http.MethodPut: h.setStatus(w, r) default: - http.Error(w, "method "+r.Method+" not supported", http.StatusBadRequest) + errMethodNotSupported(w, r.Method) } case "/settings": switch r.Method { @@ -47,10 +47,10 @@ func (h *vpnHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { case http.MethodPut: h.patchSettings(w, r) default: - http.Error(w, "method "+r.Method+" not supported", http.StatusBadRequest) + errMethodNotSupported(w, r.Method) } default: - http.Error(w, "route "+r.RequestURI+" not supported", http.StatusBadRequest) + errRouteNotSupported(w, r.RequestURI) } } diff --git a/internal/storage/helpers.go b/internal/storage/helpers.go new file mode 100644 index 00000000..cd6bf9dc --- /dev/null +++ b/internal/storage/helpers.go @@ -0,0 +1,8 @@ +package storage + +import "fmt" + +func panicOnProviderMissingHardcoded(provider string) { + panic(fmt.Sprintf("provider %s not found in hardcoded servers map; "+ + "did you add the provider key in the embedded servers.json?", provider)) +} diff --git a/internal/storage/read.go b/internal/storage/read.go index 6826eeff..4bb395ec 100644 --- a/internal/storage/read.go +++ b/internal/storage/read.go @@ -51,8 +51,7 @@ func (s *Storage) extractServersFromBytes(b []byte, hardcodedVersions map[string for _, provider := range allProviders { hardcodedVersion, ok := hardcodedVersions[provider] if !ok { - panic(fmt.Sprintf("provider %s not found in hardcoded servers map; "+ - "did you add the provider key in the embedded servers.json?", provider)) + panicOnProviderMissingHardcoded(provider) } rawMessage, ok := rawMessages[provider] diff --git a/internal/storage/servers.go b/internal/storage/servers.go index a7660c19..f8f9b02c 100644 --- a/internal/storage/servers.go +++ b/internal/storage/servers.go @@ -112,8 +112,7 @@ func (s *Storage) ServersAreEqual(provider string, servers []models.Server) (equ func (s *Storage) getMergedServersObject(provider string) (serversObject models.Servers) { serversObject, ok := s.mergedServers.ProviderToServers[provider] if !ok { - panic(fmt.Sprintf("provider %s not found in hardcoded servers map; "+ - "did you add the provider key in the embedded servers.json?", provider)) + panicOnProviderMissingHardcoded(provider) } return serversObject } diff --git a/internal/updater/resolver/net.go b/internal/updater/resolver/net.go index 1e8a2971..893a1874 100644 --- a/internal/updater/resolver/net.go +++ b/internal/updater/resolver/net.go @@ -10,7 +10,7 @@ func newResolver(resolverAddress string) *net.Resolver { resolverAddress = net.JoinHostPort(resolverAddress, "53") return &net.Resolver{ PreferGo: true, - Dial: func(ctx context.Context, network, address string) (net.Conn, error) { + Dial: func(ctx context.Context, _, _ string) (net.Conn, error) { return d.DialContext(ctx, "udp", resolverAddress) }, } diff --git a/internal/wireguard/address_test.go b/internal/wireguard/address_test.go index 2d4a453e..03c4d1c8 100644 --- a/internal/wireguard/address_test.go +++ b/internal/wireguard/address_test.go @@ -83,7 +83,7 @@ func Test_Wireguard_addAddresses(t *testing.T) { }, "ignore IPv6": { addrs: []netip.Prefix{ipNetTwo}, - wgBuilder: func(ctrl *gomock.Controller, link netlink.Link) *Wireguard { + wgBuilder: func(_ *gomock.Controller, _ netlink.Link) *Wireguard { return &Wireguard{ settings: Settings{ IPv6: ptrTo(false),