Upgrade dependencies
- Use of context for custom http client - Remove unused nodeid for logger - Upgrade shadowsocks dependency
This commit is contained in:
@@ -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
8
go.mod
@@ -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
14
go.sum
@@ -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=
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user