Upgrade dependencies

- Use of context for custom http client
- Remove unused nodeid for logger
- Upgrade shadowsocks dependency
This commit is contained in:
Quentin McGaw
2020-10-18 02:24:34 +00:00
parent b27e637894
commit 84c1f46ae4
16 changed files with 97 additions and 71 deletions

View File

@@ -294,7 +294,7 @@ func _main(background context.Context, args []string) int { //nolint:gocognit,go
} }
func createLogger() logging.Logger { func createLogger() logging.Logger {
logger, err := logging.NewLogger(logging.ConsoleEncoding, logging.InfoLevel, -1) logger, err := logging.NewLogger(logging.ConsoleEncoding, logging.InfoLevel)
if err != nil { if err != nil {
panic(err) panic(err)
} }

8
go.mod
View File

@@ -6,9 +6,9 @@ require (
github.com/fatih/color v1.9.0 github.com/fatih/color v1.9.0
github.com/golang/mock v1.4.4 github.com/golang/mock v1.4.4
github.com/kyokomi/emoji v2.2.4+incompatible github.com/kyokomi/emoji v2.2.4+incompatible
github.com/qdm12/golibs v0.0.0-20200712151944-a0325873bf5a github.com/qdm12/golibs v0.0.0-20201018021451-d64f6f83fb81
github.com/qdm12/ss-server v0.0.0-20200819005413-6b516c299307 github.com/qdm12/ss-server v0.0.0-20200819124651-6428e626ee83
github.com/stretchr/testify v1.6.1 github.com/stretchr/testify v1.6.1
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed golang.org/x/sys v0.0.0-20201017003518-b09fb700fbb7
) )

14
go.sum
View File

@@ -72,10 +72,12 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/qdm12/golibs v0.0.0-20200712151944-a0325873bf5a h1:IyS72qFm+iXipadmUKXmpJScKXXK2GrD8yYfxXsnIYs= github.com/qdm12/golibs v0.0.0-20201018021451-d64f6f83fb81 h1:UouAegRn1ZB2BgoA7cA6wE5hr24cN2mgo4Lo8qC9yxo=
github.com/qdm12/golibs v0.0.0-20200712151944-a0325873bf5a/go.mod h1:pikkTN7g7zRuuAnERwqW1yAFq6pYmxrxpjiwGvb0Ysc= github.com/qdm12/golibs v0.0.0-20201018021451-d64f6f83fb81/go.mod h1:xbNrWrKyAZ5akH7lqp/uEA2HTZg+qDOzzugSiyLbzAA=
github.com/qdm12/ss-server v0.0.0-20200819005413-6b516c299307 h1:+LhVxIKpZgUM8ZcopIuc3Yjk+p76dWRdYLQiAA7caZM= github.com/qdm12/ss-server v0.0.0-20200819005413-6b516c299307 h1:+LhVxIKpZgUM8ZcopIuc3Yjk+p76dWRdYLQiAA7caZM=
github.com/qdm12/ss-server v0.0.0-20200819005413-6b516c299307/go.mod h1:ABVUkxubboL3vqBkOwDV9glX1/x7SnYrckBe5d+M/zw= github.com/qdm12/ss-server v0.0.0-20200819005413-6b516c299307/go.mod h1:ABVUkxubboL3vqBkOwDV9glX1/x7SnYrckBe5d+M/zw=
github.com/qdm12/ss-server v0.0.0-20200819124651-6428e626ee83 h1:b7sNsgsKxH0mbl9L1hdUp5KSDkZ/1kOQ+iHiBVgFElM=
github.com/qdm12/ss-server v0.0.0-20200819124651-6428e626ee83/go.mod h1:ABVUkxubboL3vqBkOwDV9glX1/x7SnYrckBe5d+M/zw=
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg= github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg=
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s= github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
@@ -98,6 +100,7 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig=
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
@@ -108,6 +111,8 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0 h1:5kGOVHlq0euqwzgTC9Vu15p6fV1Wi0ArVi8da2urnVg=
golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -116,9 +121,14 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ=
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201017003518-b09fb700fbb7 h1:XtNJkfEjb4zR3q20BBBcYUykVOEMgZeIUOpBPfNYgxg=
golang.org/x/sys v0.0.0-20201017003518-b09fb700fbb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=

View File

@@ -58,7 +58,7 @@ func HealthCheck(ctx context.Context, client *http.Client) error {
} }
func OpenvpnConfig() error { func OpenvpnConfig() error {
logger, err := logging.NewLogger(logging.ConsoleEncoding, logging.InfoLevel, -1) logger, err := logging.NewLogger(logging.ConsoleEncoding, logging.InfoLevel)
if err != nil { if err != nil {
return err return err
} }
@@ -109,7 +109,7 @@ func Update(args []string) error {
if err := flagSet.Parse(args); err != nil { if err := flagSet.Parse(args); err != nil {
return err return err
} }
logger, err := logging.NewLogger(logging.ConsoleEncoding, logging.InfoLevel, -1) logger, err := logging.NewLogger(logging.ConsoleEncoding, logging.InfoLevel)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -1,6 +1,7 @@
package dns package dns
import ( import (
"context"
"fmt" "fmt"
"net/http" "net/http"
"sort" "sort"
@@ -13,9 +14,9 @@ import (
"github.com/qdm12/golibs/network" "github.com/qdm12/golibs/network"
) )
func (c *configurator) MakeUnboundConf(settings settings.DNS, uid, gid int) (err error) { func (c *configurator) MakeUnboundConf(ctx context.Context, settings settings.DNS, uid, gid int) (err error) {
c.logger.Info("generating Unbound configuration") c.logger.Info("generating Unbound configuration")
lines, warnings := generateUnboundConf(settings, c.client, c.logger) lines, warnings := generateUnboundConf(ctx, settings, c.client, c.logger)
for _, warning := range warnings { for _, warning := range warnings {
c.logger.Warn(warning) c.logger.Warn(warning)
} }
@@ -27,7 +28,7 @@ func (c *configurator) MakeUnboundConf(settings settings.DNS, uid, gid int) (err
} }
// MakeUnboundConf generates an Unbound configuration from the user provided settings // MakeUnboundConf generates an Unbound configuration from the user provided settings
func generateUnboundConf(settings settings.DNS, client network.Client, logger logging.Logger) (lines []string, warnings []error) { func generateUnboundConf(ctx context.Context, settings settings.DNS, client network.Client, logger logging.Logger) (lines []string, warnings []error) {
doIPv6 := "no" doIPv6 := "no"
if settings.IPv6 { if settings.IPv6 {
doIPv6 = "yes" doIPv6 = "yes"
@@ -70,7 +71,7 @@ func generateUnboundConf(settings settings.DNS, client network.Client, logger lo
} }
// Block lists // Block lists
hostnamesLines, ipsLines, warnings := buildBlocked(client, hostnamesLines, ipsLines, warnings := buildBlocked(ctx, client,
settings.BlockMalicious, settings.BlockAds, settings.BlockSurveillance, settings.BlockMalicious, settings.BlockAds, settings.BlockSurveillance,
settings.AllowedHostnames, settings.PrivateAddresses, settings.AllowedHostnames, settings.PrivateAddresses,
) )
@@ -129,18 +130,18 @@ func generateUnboundConf(settings settings.DNS, client network.Client, logger lo
return lines, warnings return lines, warnings
} }
func buildBlocked(client network.Client, blockMalicious, blockAds, blockSurveillance bool, func buildBlocked(ctx context.Context, client network.Client, blockMalicious, blockAds, blockSurveillance bool,
allowedHostnames, privateAddresses []string) (hostnamesLines, ipsLines []string, errs []error) { allowedHostnames, privateAddresses []string) (hostnamesLines, ipsLines []string, errs []error) {
chHostnames := make(chan []string) chHostnames := make(chan []string)
chIPs := make(chan []string) chIPs := make(chan []string)
chErrors := make(chan []error) chErrors := make(chan []error)
go func() { go func() {
lines, errs := buildBlockedHostnames(client, blockMalicious, blockAds, blockSurveillance, allowedHostnames) lines, errs := buildBlockedHostnames(ctx, client, blockMalicious, blockAds, blockSurveillance, allowedHostnames)
chHostnames <- lines chHostnames <- lines
chErrors <- errs chErrors <- errs
}() }()
go func() { go func() {
lines, errs := buildBlockedIPs(client, blockMalicious, blockAds, blockSurveillance, privateAddresses) lines, errs := buildBlockedIPs(ctx, client, blockMalicious, blockAds, blockSurveillance, privateAddresses)
chIPs <- lines chIPs <- lines
chErrors <- errs chErrors <- errs
}() }()
@@ -159,8 +160,8 @@ func buildBlocked(client network.Client, blockMalicious, blockAds, blockSurveill
return hostnamesLines, ipsLines, errs return hostnamesLines, ipsLines, errs
} }
func getList(client network.Client, url string) (results []string, err error) { func getList(ctx context.Context, client network.Client, url string) (results []string, err error) {
content, status, err := client.GetContent(url) content, status, err := client.Get(ctx, url)
if err != nil { if err != nil {
return nil, err return nil, err
} else if status != http.StatusOK { } else if status != http.StatusOK {
@@ -184,7 +185,7 @@ func getList(client network.Client, url string) (results []string, err error) {
return results, nil return results, nil
} }
func buildBlockedHostnames(client network.Client, blockMalicious, blockAds, blockSurveillance bool, func buildBlockedHostnames(ctx context.Context, client network.Client, blockMalicious, blockAds, blockSurveillance bool,
allowedHostnames []string) (lines []string, errs []error) { allowedHostnames []string) (lines []string, errs []error) {
chResults := make(chan []string) chResults := make(chan []string)
chError := make(chan error) chError := make(chan error)
@@ -192,7 +193,7 @@ func buildBlockedHostnames(client network.Client, blockMalicious, blockAds, bloc
if blockMalicious { if blockMalicious {
listsLeftToFetch++ listsLeftToFetch++
go func() { go func() {
results, err := getList(client, string(constants.MaliciousBlockListHostnamesURL)) results, err := getList(ctx, client, string(constants.MaliciousBlockListHostnamesURL))
chResults <- results chResults <- results
chError <- err chError <- err
}() }()
@@ -200,7 +201,7 @@ func buildBlockedHostnames(client network.Client, blockMalicious, blockAds, bloc
if blockAds { if blockAds {
listsLeftToFetch++ listsLeftToFetch++
go func() { go func() {
results, err := getList(client, string(constants.AdsBlockListHostnamesURL)) results, err := getList(ctx, client, string(constants.AdsBlockListHostnamesURL))
chResults <- results chResults <- results
chError <- err chError <- err
}() }()
@@ -208,7 +209,7 @@ func buildBlockedHostnames(client network.Client, blockMalicious, blockAds, bloc
if blockSurveillance { if blockSurveillance {
listsLeftToFetch++ listsLeftToFetch++
go func() { go func() {
results, err := getList(client, string(constants.SurveillanceBlockListHostnamesURL)) results, err := getList(ctx, client, string(constants.SurveillanceBlockListHostnamesURL))
chResults <- results chResults <- results
chError <- err chError <- err
}() }()
@@ -236,7 +237,7 @@ func buildBlockedHostnames(client network.Client, blockMalicious, blockAds, bloc
return lines, errs return lines, errs
} }
func buildBlockedIPs(client network.Client, blockMalicious, blockAds, blockSurveillance bool, func buildBlockedIPs(ctx context.Context, client network.Client, blockMalicious, blockAds, blockSurveillance bool,
privateAddresses []string) (lines []string, errs []error) { privateAddresses []string) (lines []string, errs []error) {
chResults := make(chan []string) chResults := make(chan []string)
chError := make(chan error) chError := make(chan error)
@@ -244,7 +245,7 @@ func buildBlockedIPs(client network.Client, blockMalicious, blockAds, blockSurve
if blockMalicious { if blockMalicious {
listsLeftToFetch++ listsLeftToFetch++
go func() { go func() {
results, err := getList(client, string(constants.MaliciousBlockListIPsURL)) results, err := getList(ctx, client, string(constants.MaliciousBlockListIPsURL))
chResults <- results chResults <- results
chError <- err chError <- err
}() }()
@@ -252,7 +253,7 @@ func buildBlockedIPs(client network.Client, blockMalicious, blockAds, blockSurve
if blockAds { if blockAds {
listsLeftToFetch++ listsLeftToFetch++
go func() { go func() {
results, err := getList(client, string(constants.AdsBlockListIPsURL)) results, err := getList(ctx, client, string(constants.AdsBlockListIPsURL))
chResults <- results chResults <- results
chError <- err chError <- err
}() }()
@@ -260,7 +261,7 @@ func buildBlockedIPs(client network.Client, blockMalicious, blockAds, blockSurve
if blockSurveillance { if blockSurveillance {
listsLeftToFetch++ listsLeftToFetch++
go func() { go func() {
results, err := getList(client, string(constants.SurveillanceBlockListIPsURL)) results, err := getList(ctx, client, string(constants.SurveillanceBlockListIPsURL))
chResults <- results chResults <- results
chError <- err chError <- err
}() }()

View File

@@ -1,6 +1,7 @@
package dns package dns
import ( import (
"context"
"fmt" "fmt"
"strings" "strings"
"testing" "testing"
@@ -31,15 +32,16 @@ func Test_generateUnboundConf(t *testing.T) {
} }
mockCtrl := gomock.NewController(t) mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish() defer mockCtrl.Finish()
ctx := context.Background()
client := mock_network.NewMockClient(mockCtrl) client := mock_network.NewMockClient(mockCtrl)
client.EXPECT().GetContent(string(constants.MaliciousBlockListHostnamesURL)). client.EXPECT().Get(ctx, string(constants.MaliciousBlockListHostnamesURL)).
Return([]byte("b\na\nc"), 200, nil).Times(1) Return([]byte("b\na\nc"), 200, nil).Times(1)
client.EXPECT().GetContent(string(constants.MaliciousBlockListIPsURL)). client.EXPECT().Get(ctx, string(constants.MaliciousBlockListIPsURL)).
Return([]byte("c\nd\n"), 200, nil).Times(1) Return([]byte("c\nd\n"), 200, nil).Times(1)
logger := mock_logging.NewMockLogger(mockCtrl) logger := mock_logging.NewMockLogger(mockCtrl)
logger.EXPECT().Info("%d hostnames blocked overall", 2).Times(1) logger.EXPECT().Info("%d hostnames blocked overall", 2).Times(1)
logger.EXPECT().Info("%d IP addresses blocked overall", 3).Times(1) logger.EXPECT().Info("%d IP addresses blocked overall", 3).Times(1)
lines, warnings := generateUnboundConf(settings, client, logger) lines, warnings := generateUnboundConf(ctx, settings, client, logger)
require.Len(t, warnings, 0) require.Len(t, warnings, 0)
expected := ` expected := `
server: server:
@@ -232,26 +234,28 @@ func Test_buildBlocked(t *testing.T) {
t.Parallel() t.Parallel()
mockCtrl := gomock.NewController(t) mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish() defer mockCtrl.Finish()
ctx := context.Background()
client := mock_network.NewMockClient(mockCtrl) client := mock_network.NewMockClient(mockCtrl)
if tc.malicious.blocked { if tc.malicious.blocked {
client.EXPECT().GetContent(string(constants.MaliciousBlockListHostnamesURL)). client.EXPECT().Get(ctx, string(constants.MaliciousBlockListHostnamesURL)).
Return(tc.malicious.content, 200, tc.malicious.clientErr).Times(1) Return(tc.malicious.content, 200, tc.malicious.clientErr).Times(1)
client.EXPECT().GetContent(string(constants.MaliciousBlockListIPsURL)). client.EXPECT().Get(ctx, string(constants.MaliciousBlockListIPsURL)).
Return(tc.malicious.content, 200, tc.malicious.clientErr).Times(1) Return(tc.malicious.content, 200, tc.malicious.clientErr).Times(1)
} }
if tc.ads.blocked { if tc.ads.blocked {
client.EXPECT().GetContent(string(constants.AdsBlockListHostnamesURL)). client.EXPECT().Get(ctx, string(constants.AdsBlockListHostnamesURL)).
Return(tc.ads.content, 200, tc.ads.clientErr).Times(1) Return(tc.ads.content, 200, tc.ads.clientErr).Times(1)
client.EXPECT().GetContent(string(constants.AdsBlockListIPsURL)). client.EXPECT().Get(ctx, string(constants.AdsBlockListIPsURL)).
Return(tc.ads.content, 200, tc.ads.clientErr).Times(1) Return(tc.ads.content, 200, tc.ads.clientErr).Times(1)
} }
if tc.surveillance.blocked { if tc.surveillance.blocked {
client.EXPECT().GetContent(string(constants.SurveillanceBlockListHostnamesURL)). client.EXPECT().Get(ctx, string(constants.SurveillanceBlockListHostnamesURL)).
Return(tc.surveillance.content, 200, tc.surveillance.clientErr).Times(1) Return(tc.surveillance.content, 200, tc.surveillance.clientErr).Times(1)
client.EXPECT().GetContent(string(constants.SurveillanceBlockListIPsURL)). client.EXPECT().Get(ctx, string(constants.SurveillanceBlockListIPsURL)).
Return(tc.surveillance.content, 200, tc.surveillance.clientErr).Times(1) Return(tc.surveillance.content, 200, tc.surveillance.clientErr).Times(1)
} }
hostnamesLines, ipsLines, errs := buildBlocked(client, tc.malicious.blocked, tc.ads.blocked, tc.surveillance.blocked, hostnamesLines, ipsLines, errs := buildBlocked(ctx, client,
tc.malicious.blocked, tc.ads.blocked, tc.surveillance.blocked,
tc.allowedHostnames, tc.privateAddresses) tc.allowedHostnames, tc.privateAddresses)
var errsString []string var errsString []string
for _, err := range errs { for _, err := range errs {
@@ -284,10 +288,11 @@ func Test_getList(t *testing.T) {
t.Parallel() t.Parallel()
mockCtrl := gomock.NewController(t) mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish() defer mockCtrl.Finish()
ctx := context.Background()
client := mock_network.NewMockClient(mockCtrl) client := mock_network.NewMockClient(mockCtrl)
client.EXPECT().GetContent("irrelevant_url"). client.EXPECT().Get(ctx, "irrelevant_url").
Return(tc.content, tc.status, tc.clientErr).Times(1) Return(tc.content, tc.status, tc.clientErr).Times(1)
results, err := getList(client, "irrelevant_url") results, err := getList(ctx, client, "irrelevant_url")
if tc.err != nil { if tc.err != nil {
require.Error(t, err) require.Error(t, err)
assert.Equal(t, tc.err.Error(), err.Error()) assert.Equal(t, tc.err.Error(), err.Error())
@@ -388,21 +393,23 @@ func Test_buildBlockedHostnames(t *testing.T) {
t.Parallel() t.Parallel()
mockCtrl := gomock.NewController(t) mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish() defer mockCtrl.Finish()
ctx := context.Background()
client := mock_network.NewMockClient(mockCtrl) client := mock_network.NewMockClient(mockCtrl)
if tc.malicious.blocked { if tc.malicious.blocked {
client.EXPECT().GetContent(string(constants.MaliciousBlockListHostnamesURL)). client.EXPECT().Get(ctx, string(constants.MaliciousBlockListHostnamesURL)).
Return(tc.malicious.content, 200, tc.malicious.clientErr).Times(1) Return(tc.malicious.content, 200, tc.malicious.clientErr).Times(1)
} }
if tc.ads.blocked { if tc.ads.blocked {
client.EXPECT().GetContent(string(constants.AdsBlockListHostnamesURL)). client.EXPECT().Get(ctx, string(constants.AdsBlockListHostnamesURL)).
Return(tc.ads.content, 200, tc.ads.clientErr).Times(1) Return(tc.ads.content, 200, tc.ads.clientErr).Times(1)
} }
if tc.surveillance.blocked { if tc.surveillance.blocked {
client.EXPECT().GetContent(string(constants.SurveillanceBlockListHostnamesURL)). client.EXPECT().Get(ctx, string(constants.SurveillanceBlockListHostnamesURL)).
Return(tc.surveillance.content, 200, tc.surveillance.clientErr).Times(1) Return(tc.surveillance.content, 200, tc.surveillance.clientErr).Times(1)
} }
lines, errs := buildBlockedHostnames(client, lines, errs := buildBlockedHostnames(ctx, client,
tc.malicious.blocked, tc.ads.blocked, tc.surveillance.blocked, tc.allowedHostnames) tc.malicious.blocked, tc.ads.blocked,
tc.surveillance.blocked, tc.allowedHostnames)
var errsString []string var errsString []string
for _, err := range errs { for _, err := range errs {
errsString = append(errsString, err.Error()) errsString = append(errsString, err.Error())
@@ -504,21 +511,23 @@ func Test_buildBlockedIPs(t *testing.T) {
t.Parallel() t.Parallel()
mockCtrl := gomock.NewController(t) mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish() defer mockCtrl.Finish()
ctx := context.Background()
client := mock_network.NewMockClient(mockCtrl) client := mock_network.NewMockClient(mockCtrl)
if tc.malicious.blocked { if tc.malicious.blocked {
client.EXPECT().GetContent(string(constants.MaliciousBlockListIPsURL)). client.EXPECT().Get(ctx, string(constants.MaliciousBlockListIPsURL)).
Return(tc.malicious.content, 200, tc.malicious.clientErr).Times(1) Return(tc.malicious.content, 200, tc.malicious.clientErr).Times(1)
} }
if tc.ads.blocked { if tc.ads.blocked {
client.EXPECT().GetContent(string(constants.AdsBlockListIPsURL)). client.EXPECT().Get(ctx, string(constants.AdsBlockListIPsURL)).
Return(tc.ads.content, 200, tc.ads.clientErr).Times(1) Return(tc.ads.content, 200, tc.ads.clientErr).Times(1)
} }
if tc.surveillance.blocked { if tc.surveillance.blocked {
client.EXPECT().GetContent(string(constants.SurveillanceBlockListIPsURL)). client.EXPECT().Get(ctx, string(constants.SurveillanceBlockListIPsURL)).
Return(tc.surveillance.content, 200, tc.surveillance.clientErr).Times(1) Return(tc.surveillance.content, 200, tc.surveillance.clientErr).Times(1)
} }
lines, errs := buildBlockedIPs(client, lines, errs := buildBlockedIPs(ctx, client,
tc.malicious.blocked, tc.ads.blocked, tc.surveillance.blocked, tc.privateAddresses) tc.malicious.blocked, tc.ads.blocked,
tc.surveillance.blocked, tc.privateAddresses)
var errsString []string var errsString []string
for _, err := range errs { for _, err := range errs {
errsString = append(errsString, err.Error()) errsString = append(errsString, err.Error())

View File

@@ -13,9 +13,9 @@ import (
) )
type Configurator interface { type Configurator interface {
DownloadRootHints(uid, gid int) error DownloadRootHints(ctx context.Context, uid, gid int) error
DownloadRootKey(uid, gid int) error DownloadRootKey(ctx context.Context, uid, gid int) error
MakeUnboundConf(settings settings.DNS, uid, gid int) (err error) MakeUnboundConf(ctx context.Context, settings settings.DNS, uid, gid int) (err error)
UseDNSInternally(IP net.IP) UseDNSInternally(IP net.IP)
UseDNSSystemWide(ip net.IP, keepNameserver bool) error UseDNSSystemWide(ip net.IP, keepNameserver bool) error
Start(ctx context.Context, logLevel uint8) (stdout io.ReadCloser, waitFn func() error, err error) Start(ctx context.Context, logLevel uint8) (stdout io.ReadCloser, waitFn func() error, err error)

View File

@@ -164,15 +164,15 @@ func (l *looper) Run(ctx context.Context, wg *sync.WaitGroup, signalDNSReady fun
settings := l.GetSettings() settings := l.GetSettings()
// Setup // Setup
if err := l.conf.DownloadRootHints(l.uid, l.gid); err != nil { if err := l.conf.DownloadRootHints(ctx, l.uid, l.gid); err != nil {
l.logAndWait(ctx, err) l.logAndWait(ctx, err)
continue continue
} }
if err := l.conf.DownloadRootKey(l.uid, l.gid); err != nil { if err := l.conf.DownloadRootKey(ctx, l.uid, l.gid); err != nil {
l.logAndWait(ctx, err) l.logAndWait(ctx, err)
continue continue
} }
if err := l.conf.MakeUnboundConf(settings, l.uid, l.gid); err != nil { if err := l.conf.MakeUnboundConf(ctx, settings, l.uid, l.gid); err != nil {
l.logAndWait(ctx, err) l.logAndWait(ctx, err)
continue continue
} }

View File

@@ -1,6 +1,7 @@
package dns package dns
import ( import (
"context"
"fmt" "fmt"
"net/http" "net/http"
@@ -8,9 +9,9 @@ import (
"github.com/qdm12/golibs/files" "github.com/qdm12/golibs/files"
) )
func (c *configurator) DownloadRootHints(uid, gid int) error { func (c *configurator) DownloadRootHints(ctx context.Context, uid, gid int) error {
c.logger.Info("downloading root hints from %s", constants.NamedRootURL) c.logger.Info("downloading root hints from %s", constants.NamedRootURL)
content, status, err := c.client.GetContent(string(constants.NamedRootURL)) content, status, err := c.client.Get(ctx, string(constants.NamedRootURL))
if err != nil { if err != nil {
return err return err
} else if status != http.StatusOK { } else if status != http.StatusOK {
@@ -23,9 +24,9 @@ func (c *configurator) DownloadRootHints(uid, gid int) error {
files.Permissions(0400)) files.Permissions(0400))
} }
func (c *configurator) DownloadRootKey(uid, gid int) error { func (c *configurator) DownloadRootKey(ctx context.Context, uid, gid int) error {
c.logger.Info("downloading root key from %s", constants.RootKeyURL) c.logger.Info("downloading root key from %s", constants.RootKeyURL)
content, status, err := c.client.GetContent(string(constants.RootKeyURL)) content, status, err := c.client.Get(ctx, string(constants.RootKeyURL))
if err != nil { if err != nil {
return err return err
} else if status != http.StatusOK { } else if status != http.StatusOK {

View File

@@ -1,6 +1,7 @@
package dns package dns
import ( import (
"context"
"fmt" "fmt"
"net/http" "net/http"
"testing" "testing"
@@ -52,10 +53,11 @@ func Test_DownloadRootHints(t *testing.T) { //nolint:dupl
t.Parallel() t.Parallel()
mockCtrl := gomock.NewController(t) mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish() defer mockCtrl.Finish()
ctx := context.Background()
logger := mock_logging.NewMockLogger(mockCtrl) logger := mock_logging.NewMockLogger(mockCtrl)
logger.EXPECT().Info("downloading root hints from %s", constants.NamedRootURL).Times(1) logger.EXPECT().Info("downloading root hints from %s", constants.NamedRootURL).Times(1)
client := mock_network.NewMockClient(mockCtrl) client := mock_network.NewMockClient(mockCtrl)
client.EXPECT().GetContent(string(constants.NamedRootURL)). client.EXPECT().Get(ctx, string(constants.NamedRootURL)).
Return(tc.content, tc.status, tc.clientErr).Times(1) Return(tc.content, tc.status, tc.clientErr).Times(1)
fileManager := mock_files.NewMockFileManager(mockCtrl) fileManager := mock_files.NewMockFileManager(mockCtrl)
if tc.clientErr == nil && tc.status == http.StatusOK { if tc.clientErr == nil && tc.status == http.StatusOK {
@@ -67,7 +69,7 @@ func Test_DownloadRootHints(t *testing.T) { //nolint:dupl
Return(tc.writeErr).Times(1) Return(tc.writeErr).Times(1)
} }
c := &configurator{logger: logger, client: client, fileManager: fileManager} c := &configurator{logger: logger, client: client, fileManager: fileManager}
err := c.DownloadRootHints(1000, 1000) err := c.DownloadRootHints(ctx, 1000, 1000)
if tc.err != nil { if tc.err != nil {
require.Error(t, err) require.Error(t, err)
assert.Equal(t, tc.err.Error(), err.Error()) assert.Equal(t, tc.err.Error(), err.Error())
@@ -114,10 +116,11 @@ func Test_DownloadRootKey(t *testing.T) { //nolint:dupl
t.Parallel() t.Parallel()
mockCtrl := gomock.NewController(t) mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish() defer mockCtrl.Finish()
ctx := context.Background()
logger := mock_logging.NewMockLogger(mockCtrl) logger := mock_logging.NewMockLogger(mockCtrl)
logger.EXPECT().Info("downloading root key from %s", constants.RootKeyURL).Times(1) logger.EXPECT().Info("downloading root key from %s", constants.RootKeyURL).Times(1)
client := mock_network.NewMockClient(mockCtrl) client := mock_network.NewMockClient(mockCtrl)
client.EXPECT().GetContent(string(constants.RootKeyURL)). client.EXPECT().Get(ctx, string(constants.RootKeyURL)).
Return(tc.content, tc.status, tc.clientErr).Times(1) Return(tc.content, tc.status, tc.clientErr).Times(1)
fileManager := mock_files.NewMockFileManager(mockCtrl) fileManager := mock_files.NewMockFileManager(mockCtrl)
if tc.clientErr == nil && tc.status == http.StatusOK { if tc.clientErr == nil && tc.status == http.StatusOK {
@@ -129,7 +132,7 @@ func Test_DownloadRootKey(t *testing.T) { //nolint:dupl
).Return(tc.writeErr).Times(1) ).Return(tc.writeErr).Times(1)
} }
c := &configurator{logger: logger, client: client, fileManager: fileManager} c := &configurator{logger: logger, client: client, fileManager: fileManager}
err := c.DownloadRootKey(1000, 1001) err := c.DownloadRootKey(ctx, 1000, 1001)
if tc.err != nil { if tc.err != nil {
require.Error(t, err) require.Error(t, err)
assert.Equal(t, tc.err.Error(), err.Error()) assert.Equal(t, tc.err.Error(), err.Error())

View File

@@ -104,7 +104,7 @@ func (l *looper) Run(ctx context.Context, wg *sync.WaitGroup) {
// Enabled and has a period set // Enabled and has a period set
ip, err := l.getter.Get() ip, err := l.getter.Get(ctx)
if err != nil { if err != nil {
l.logAndWait(ctx, err) l.logAndWait(ctx, err)
continue continue

View File

@@ -1,6 +1,7 @@
package publicip package publicip
import ( import (
"context"
"fmt" "fmt"
"math/rand" "math/rand"
"net" "net"
@@ -11,7 +12,7 @@ import (
) )
type IPGetter interface { type IPGetter interface {
Get() (ip net.IP, err error) Get(ctx context.Context) (ip net.IP, err error)
} }
type ipGetter struct { type ipGetter struct {
@@ -26,7 +27,7 @@ func NewIPGetter(client network.Client) IPGetter {
} }
} }
func (i *ipGetter) Get() (ip net.IP, err error) { func (i *ipGetter) Get(ctx context.Context) (ip net.IP, err error) {
urls := []string{ urls := []string{
"https://ifconfig.me/ip", "https://ifconfig.me/ip",
"http://ip1.dynupdate.no-ip.com:8245", "http://ip1.dynupdate.no-ip.com:8245",
@@ -38,7 +39,7 @@ func (i *ipGetter) Get() (ip net.IP, err error) {
"https://ipinfo.io/ip", "https://ipinfo.io/ip",
} }
url := urls[i.randIntn(len(urls))] url := urls[i.randIntn(len(urls))]
content, status, err := i.client.GetContent(url, network.UseRandomUserAgent()) content, status, err := i.client.Get(ctx, url, network.UseRandomUserAgent())
if err != nil { if err != nil {
return nil, err return nil, err
} else if status != http.StatusOK { } else if status != http.StatusOK {

View File

@@ -13,7 +13,7 @@ import (
func (u *updater) updatePIAOld(ctx context.Context) (err error) { func (u *updater) updatePIAOld(ctx context.Context) (err error) {
const zipURL = "https://www.privateinternetaccess.com/openvpn/openvpn.zip" const zipURL = "https://www.privateinternetaccess.com/openvpn/openvpn.zip"
contents, err := fetchAndExtractFiles(zipURL) contents, err := fetchAndExtractFiles(ctx, zipURL)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -72,7 +72,7 @@ func findSurfsharkServersFromAPI(ctx context.Context, lookupIP lookupIPFunc, htt
func findSurfsharkServersFromZip(ctx context.Context, lookupIP lookupIPFunc) (servers []models.SurfsharkServer, warnings []string, err error) { func findSurfsharkServersFromZip(ctx context.Context, lookupIP lookupIPFunc) (servers []models.SurfsharkServer, warnings []string, err error) {
const zipURL = "https://my.surfshark.com/vpn/api/v1/server/configurations" const zipURL = "https://my.surfshark.com/vpn/api/v1/server/configurations"
contents, err := fetchAndExtractFiles(zipURL) contents, err := fetchAndExtractFiles(ctx, zipURL)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }

View File

@@ -25,7 +25,7 @@ func (u *updater) updateVyprvpn(ctx context.Context) (err error) {
func findVyprvpnServers(ctx context.Context, lookupIP lookupIPFunc) (servers []models.VyprvpnServer, err error) { func findVyprvpnServers(ctx context.Context, lookupIP lookupIPFunc) (servers []models.VyprvpnServer, err error) {
const zipURL = "https://support.vyprvpn.com/hc/article_attachments/360052617332/Vypr_OpenVPN_20200320.zip" const zipURL = "https://support.vyprvpn.com/hc/article_attachments/360052617332/Vypr_OpenVPN_20200320.zip"
contents, err := fetchAndExtractFiles(zipURL) contents, err := fetchAndExtractFiles(ctx, zipURL)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -3,6 +3,7 @@ package updater
import ( import (
"archive/zip" "archive/zip"
"bytes" "bytes"
"context"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@@ -13,11 +14,11 @@ import (
"github.com/qdm12/golibs/network" "github.com/qdm12/golibs/network"
) )
func fetchAndExtractFiles(urls ...string) (contents map[string][]byte, err error) { func fetchAndExtractFiles(ctx context.Context, urls ...string) (contents map[string][]byte, err error) {
client := network.NewClient(10 * time.Second) client := network.NewClient(10 * time.Second)
contents = make(map[string][]byte) contents = make(map[string][]byte)
for _, url := range urls { for _, url := range urls {
zipBytes, status, err := client.GetContent(url) zipBytes, status, err := client.Get(ctx, url)
if err != nil { if err != nil {
return nil, err return nil, err
} else if status != http.StatusOK { } else if status != http.StatusOK {