chore(settings): use generics for helping functions (#1427)
This commit is contained in:
1
go.mod
1
go.mod
@@ -18,6 +18,7 @@ require (
|
||||
github.com/stretchr/testify v1.8.2
|
||||
github.com/vishvananda/netlink v1.2.1-beta.2
|
||||
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a
|
||||
golang.org/x/exp v0.0.0-20230519143937-03e91628a987
|
||||
golang.org/x/net v0.10.0
|
||||
golang.org/x/sys v0.8.0
|
||||
golang.org/x/text v0.9.0
|
||||
|
||||
2
go.sum
2
go.sum
@@ -150,6 +150,8 @@ golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
|
||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||
golang.org/x/exp v0.0.0-20230519143937-03e91628a987 h1:3xJIFvzUFbu4ls0BTBYcgbCGhA63eAOEMxIHugyXJqA=
|
||||
golang.org/x/exp v0.0.0-20230519143937-03e91628a987/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
|
||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
|
||||
@@ -40,7 +40,7 @@ func (d DNS) validate() (err error) {
|
||||
func (d *DNS) Copy() (copied DNS) {
|
||||
return DNS{
|
||||
ServerAddress: d.ServerAddress,
|
||||
KeepNameserver: helpers.CopyBoolPtr(d.KeepNameserver),
|
||||
KeepNameserver: helpers.CopyPointer(d.KeepNameserver),
|
||||
DoT: d.DoT.copy(),
|
||||
}
|
||||
}
|
||||
@@ -49,7 +49,7 @@ func (d *DNS) Copy() (copied DNS) {
|
||||
// unset field of the receiver settings object.
|
||||
func (d *DNS) mergeWith(other DNS) {
|
||||
d.ServerAddress = helpers.MergeWithIP(d.ServerAddress, other.ServerAddress)
|
||||
d.KeepNameserver = helpers.MergeWithBool(d.KeepNameserver, other.KeepNameserver)
|
||||
d.KeepNameserver = helpers.MergeWithPointer(d.KeepNameserver, other.KeepNameserver)
|
||||
d.DoT.mergeWith(other.DoT)
|
||||
}
|
||||
|
||||
@@ -58,14 +58,14 @@ func (d *DNS) mergeWith(other DNS) {
|
||||
// settings.
|
||||
func (d *DNS) overrideWith(other DNS) {
|
||||
d.ServerAddress = helpers.OverrideWithIP(d.ServerAddress, other.ServerAddress)
|
||||
d.KeepNameserver = helpers.OverrideWithBool(d.KeepNameserver, other.KeepNameserver)
|
||||
d.KeepNameserver = helpers.OverrideWithPointer(d.KeepNameserver, other.KeepNameserver)
|
||||
d.DoT.overrideWith(other.DoT)
|
||||
}
|
||||
|
||||
func (d *DNS) setDefaults() {
|
||||
localhost := netip.AddrFrom4([4]byte{127, 0, 0, 1})
|
||||
d.ServerAddress = helpers.DefaultIP(d.ServerAddress, localhost)
|
||||
d.KeepNameserver = helpers.DefaultBool(d.KeepNameserver, false)
|
||||
d.KeepNameserver = helpers.DefaultPointer(d.KeepNameserver, false)
|
||||
d.DoT.setDefaults()
|
||||
}
|
||||
|
||||
|
||||
@@ -23,9 +23,9 @@ type DNSBlacklist struct {
|
||||
}
|
||||
|
||||
func (b *DNSBlacklist) setDefaults() {
|
||||
b.BlockMalicious = helpers.DefaultBool(b.BlockMalicious, true)
|
||||
b.BlockAds = helpers.DefaultBool(b.BlockAds, false)
|
||||
b.BlockSurveillance = helpers.DefaultBool(b.BlockSurveillance, true)
|
||||
b.BlockMalicious = helpers.DefaultPointer(b.BlockMalicious, true)
|
||||
b.BlockAds = helpers.DefaultPointer(b.BlockAds, false)
|
||||
b.BlockSurveillance = helpers.DefaultPointer(b.BlockSurveillance, true)
|
||||
}
|
||||
|
||||
var hostRegex = regexp.MustCompile(`^([a-zA-Z0-9]|[a-zA-Z0-9_][a-zA-Z0-9\-_]{0,61}[a-zA-Z0-9_])(\.([a-zA-Z0-9]|[a-zA-Z0-9_][a-zA-Z0-9\-_]{0,61}[a-zA-Z0-9]))*$`) //nolint:lll
|
||||
@@ -53,34 +53,34 @@ func (b DNSBlacklist) validate() (err error) {
|
||||
|
||||
func (b DNSBlacklist) copy() (copied DNSBlacklist) {
|
||||
return DNSBlacklist{
|
||||
BlockMalicious: helpers.CopyBoolPtr(b.BlockMalicious),
|
||||
BlockAds: helpers.CopyBoolPtr(b.BlockAds),
|
||||
BlockSurveillance: helpers.CopyBoolPtr(b.BlockSurveillance),
|
||||
AllowedHosts: helpers.CopyStringSlice(b.AllowedHosts),
|
||||
AddBlockedHosts: helpers.CopyStringSlice(b.AddBlockedHosts),
|
||||
AddBlockedIPs: helpers.CopyNetipAddressesSlice(b.AddBlockedIPs),
|
||||
AddBlockedIPPrefixes: helpers.CopyNetipPrefixesSlice(b.AddBlockedIPPrefixes),
|
||||
BlockMalicious: helpers.CopyPointer(b.BlockMalicious),
|
||||
BlockAds: helpers.CopyPointer(b.BlockAds),
|
||||
BlockSurveillance: helpers.CopyPointer(b.BlockSurveillance),
|
||||
AllowedHosts: helpers.CopySlice(b.AllowedHosts),
|
||||
AddBlockedHosts: helpers.CopySlice(b.AddBlockedHosts),
|
||||
AddBlockedIPs: helpers.CopySlice(b.AddBlockedIPs),
|
||||
AddBlockedIPPrefixes: helpers.CopySlice(b.AddBlockedIPPrefixes),
|
||||
}
|
||||
}
|
||||
|
||||
func (b *DNSBlacklist) mergeWith(other DNSBlacklist) {
|
||||
b.BlockMalicious = helpers.MergeWithBool(b.BlockMalicious, other.BlockMalicious)
|
||||
b.BlockAds = helpers.MergeWithBool(b.BlockAds, other.BlockAds)
|
||||
b.BlockSurveillance = helpers.MergeWithBool(b.BlockSurveillance, other.BlockSurveillance)
|
||||
b.AllowedHosts = helpers.MergeStringSlices(b.AllowedHosts, other.AllowedHosts)
|
||||
b.AddBlockedHosts = helpers.MergeStringSlices(b.AddBlockedHosts, other.AddBlockedHosts)
|
||||
b.AddBlockedIPs = helpers.MergeNetipAddressesSlices(b.AddBlockedIPs, other.AddBlockedIPs)
|
||||
b.AddBlockedIPPrefixes = helpers.MergeNetipPrefixesSlices(b.AddBlockedIPPrefixes, other.AddBlockedIPPrefixes)
|
||||
b.BlockMalicious = helpers.MergeWithPointer(b.BlockMalicious, other.BlockMalicious)
|
||||
b.BlockAds = helpers.MergeWithPointer(b.BlockAds, other.BlockAds)
|
||||
b.BlockSurveillance = helpers.MergeWithPointer(b.BlockSurveillance, other.BlockSurveillance)
|
||||
b.AllowedHosts = helpers.MergeSlices(b.AllowedHosts, other.AllowedHosts)
|
||||
b.AddBlockedHosts = helpers.MergeSlices(b.AddBlockedHosts, other.AddBlockedHosts)
|
||||
b.AddBlockedIPs = helpers.MergeSlices(b.AddBlockedIPs, other.AddBlockedIPs)
|
||||
b.AddBlockedIPPrefixes = helpers.MergeSlices(b.AddBlockedIPPrefixes, other.AddBlockedIPPrefixes)
|
||||
}
|
||||
|
||||
func (b *DNSBlacklist) overrideWith(other DNSBlacklist) {
|
||||
b.BlockMalicious = helpers.OverrideWithBool(b.BlockMalicious, other.BlockMalicious)
|
||||
b.BlockAds = helpers.OverrideWithBool(b.BlockAds, other.BlockAds)
|
||||
b.BlockSurveillance = helpers.OverrideWithBool(b.BlockSurveillance, other.BlockSurveillance)
|
||||
b.AllowedHosts = helpers.OverrideWithStringSlice(b.AllowedHosts, other.AllowedHosts)
|
||||
b.AddBlockedHosts = helpers.OverrideWithStringSlice(b.AddBlockedHosts, other.AddBlockedHosts)
|
||||
b.AddBlockedIPs = helpers.OverrideWithNetipAddressesSlice(b.AddBlockedIPs, other.AddBlockedIPs)
|
||||
b.AddBlockedIPPrefixes = helpers.OverrideWithNetipPrefixesSlice(b.AddBlockedIPPrefixes, other.AddBlockedIPPrefixes)
|
||||
b.BlockMalicious = helpers.OverrideWithPointer(b.BlockMalicious, other.BlockMalicious)
|
||||
b.BlockAds = helpers.OverrideWithPointer(b.BlockAds, other.BlockAds)
|
||||
b.BlockSurveillance = helpers.OverrideWithPointer(b.BlockSurveillance, other.BlockSurveillance)
|
||||
b.AllowedHosts = helpers.OverrideWithSlice(b.AllowedHosts, other.AllowedHosts)
|
||||
b.AddBlockedHosts = helpers.OverrideWithSlice(b.AddBlockedHosts, other.AddBlockedHosts)
|
||||
b.AddBlockedIPs = helpers.OverrideWithSlice(b.AddBlockedIPs, other.AddBlockedIPs)
|
||||
b.AddBlockedIPPrefixes = helpers.OverrideWithSlice(b.AddBlockedIPPrefixes, other.AddBlockedIPPrefixes)
|
||||
}
|
||||
|
||||
func (b DNSBlacklist) ToBlacklistFormat() (settings blacklist.BuilderSettings, err error) {
|
||||
|
||||
@@ -54,8 +54,8 @@ func (d DoT) validate() (err error) {
|
||||
|
||||
func (d *DoT) copy() (copied DoT) {
|
||||
return DoT{
|
||||
Enabled: helpers.CopyBoolPtr(d.Enabled),
|
||||
UpdatePeriod: helpers.CopyDurationPtr(d.UpdatePeriod),
|
||||
Enabled: helpers.CopyPointer(d.Enabled),
|
||||
UpdatePeriod: helpers.CopyPointer(d.UpdatePeriod),
|
||||
Unbound: d.Unbound.copy(),
|
||||
Blacklist: d.Blacklist.copy(),
|
||||
}
|
||||
@@ -64,8 +64,8 @@ func (d *DoT) copy() (copied DoT) {
|
||||
// mergeWith merges the other settings into any
|
||||
// unset field of the receiver settings object.
|
||||
func (d *DoT) mergeWith(other DoT) {
|
||||
d.Enabled = helpers.MergeWithBool(d.Enabled, other.Enabled)
|
||||
d.UpdatePeriod = helpers.MergeWithDurationPtr(d.UpdatePeriod, other.UpdatePeriod)
|
||||
d.Enabled = helpers.MergeWithPointer(d.Enabled, other.Enabled)
|
||||
d.UpdatePeriod = helpers.MergeWithPointer(d.UpdatePeriod, other.UpdatePeriod)
|
||||
d.Unbound.mergeWith(other.Unbound)
|
||||
d.Blacklist.mergeWith(other.Blacklist)
|
||||
}
|
||||
@@ -74,16 +74,16 @@ func (d *DoT) mergeWith(other DoT) {
|
||||
// settings object with any field set in the other
|
||||
// settings.
|
||||
func (d *DoT) overrideWith(other DoT) {
|
||||
d.Enabled = helpers.OverrideWithBool(d.Enabled, other.Enabled)
|
||||
d.UpdatePeriod = helpers.OverrideWithDurationPtr(d.UpdatePeriod, other.UpdatePeriod)
|
||||
d.Enabled = helpers.OverrideWithPointer(d.Enabled, other.Enabled)
|
||||
d.UpdatePeriod = helpers.OverrideWithPointer(d.UpdatePeriod, other.UpdatePeriod)
|
||||
d.Unbound.overrideWith(other.Unbound)
|
||||
d.Blacklist.overrideWith(other.Blacklist)
|
||||
}
|
||||
|
||||
func (d *DoT) setDefaults() {
|
||||
d.Enabled = helpers.DefaultBool(d.Enabled, true)
|
||||
d.Enabled = helpers.DefaultPointer(d.Enabled, true)
|
||||
const defaultUpdatePeriod = 24 * time.Hour
|
||||
d.UpdatePeriod = helpers.DefaultDurationPtr(d.UpdatePeriod, defaultUpdatePeriod)
|
||||
d.UpdatePeriod = helpers.DefaultPointer(d.UpdatePeriod, defaultUpdatePeriod)
|
||||
d.Unbound.setDefaults()
|
||||
d.Blacklist.setDefaults()
|
||||
}
|
||||
|
||||
@@ -40,11 +40,11 @@ func hasZeroPort(ports []uint16) (has bool) {
|
||||
|
||||
func (f *Firewall) copy() (copied Firewall) {
|
||||
return Firewall{
|
||||
VPNInputPorts: helpers.CopyUint16Slice(f.VPNInputPorts),
|
||||
InputPorts: helpers.CopyUint16Slice(f.InputPorts),
|
||||
OutboundSubnets: helpers.CopyNetipPrefixesSlice(f.OutboundSubnets),
|
||||
Enabled: helpers.CopyBoolPtr(f.Enabled),
|
||||
Debug: helpers.CopyBoolPtr(f.Debug),
|
||||
VPNInputPorts: helpers.CopySlice(f.VPNInputPorts),
|
||||
InputPorts: helpers.CopySlice(f.InputPorts),
|
||||
OutboundSubnets: helpers.CopySlice(f.OutboundSubnets),
|
||||
Enabled: helpers.CopyPointer(f.Enabled),
|
||||
Debug: helpers.CopyPointer(f.Debug),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,27 +53,27 @@ func (f *Firewall) copy() (copied Firewall) {
|
||||
// It merges values of slices together, even if they
|
||||
// are set in the receiver settings.
|
||||
func (f *Firewall) mergeWith(other Firewall) {
|
||||
f.VPNInputPorts = helpers.MergeUint16Slices(f.VPNInputPorts, other.VPNInputPorts)
|
||||
f.InputPorts = helpers.MergeUint16Slices(f.InputPorts, other.InputPorts)
|
||||
f.OutboundSubnets = helpers.MergeNetipPrefixesSlices(f.OutboundSubnets, other.OutboundSubnets)
|
||||
f.Enabled = helpers.MergeWithBool(f.Enabled, other.Enabled)
|
||||
f.Debug = helpers.MergeWithBool(f.Debug, other.Debug)
|
||||
f.VPNInputPorts = helpers.MergeSlices(f.VPNInputPorts, other.VPNInputPorts)
|
||||
f.InputPorts = helpers.MergeSlices(f.InputPorts, other.InputPorts)
|
||||
f.OutboundSubnets = helpers.MergeSlices(f.OutboundSubnets, other.OutboundSubnets)
|
||||
f.Enabled = helpers.MergeWithPointer(f.Enabled, other.Enabled)
|
||||
f.Debug = helpers.MergeWithPointer(f.Debug, other.Debug)
|
||||
}
|
||||
|
||||
// overrideWith overrides fields of the receiver
|
||||
// settings object with any field set in the other
|
||||
// settings.
|
||||
func (f *Firewall) overrideWith(other Firewall) {
|
||||
f.VPNInputPorts = helpers.OverrideWithUint16Slice(f.VPNInputPorts, other.VPNInputPorts)
|
||||
f.InputPorts = helpers.OverrideWithUint16Slice(f.InputPorts, other.InputPorts)
|
||||
f.OutboundSubnets = helpers.OverrideWithNetipPrefixesSlice(f.OutboundSubnets, other.OutboundSubnets)
|
||||
f.Enabled = helpers.OverrideWithBool(f.Enabled, other.Enabled)
|
||||
f.Debug = helpers.OverrideWithBool(f.Debug, other.Debug)
|
||||
f.VPNInputPorts = helpers.OverrideWithSlice(f.VPNInputPorts, other.VPNInputPorts)
|
||||
f.InputPorts = helpers.OverrideWithSlice(f.InputPorts, other.InputPorts)
|
||||
f.OutboundSubnets = helpers.OverrideWithSlice(f.OutboundSubnets, other.OutboundSubnets)
|
||||
f.Enabled = helpers.OverrideWithPointer(f.Enabled, other.Enabled)
|
||||
f.Debug = helpers.OverrideWithPointer(f.Debug, other.Debug)
|
||||
}
|
||||
|
||||
func (f *Firewall) setDefaults() {
|
||||
f.Enabled = helpers.DefaultBool(f.Enabled, true)
|
||||
f.Debug = helpers.DefaultBool(f.Debug, false)
|
||||
f.Enabled = helpers.DefaultPointer(f.Enabled, true)
|
||||
f.Debug = helpers.DefaultPointer(f.Debug, false)
|
||||
}
|
||||
|
||||
func (f Firewall) String() string {
|
||||
|
||||
@@ -66,10 +66,10 @@ func (h *Health) copy() (copied Health) {
|
||||
// unset field of the receiver settings object.
|
||||
func (h *Health) MergeWith(other Health) {
|
||||
h.ServerAddress = helpers.MergeWithString(h.ServerAddress, other.ServerAddress)
|
||||
h.ReadHeaderTimeout = helpers.MergeWithDuration(h.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
h.ReadTimeout = helpers.MergeWithDuration(h.ReadTimeout, other.ReadTimeout)
|
||||
h.ReadHeaderTimeout = helpers.MergeWithNumber(h.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
h.ReadTimeout = helpers.MergeWithNumber(h.ReadTimeout, other.ReadTimeout)
|
||||
h.TargetAddress = helpers.MergeWithString(h.TargetAddress, other.TargetAddress)
|
||||
h.SuccessWait = helpers.MergeWithDuration(h.SuccessWait, other.SuccessWait)
|
||||
h.SuccessWait = helpers.MergeWithNumber(h.SuccessWait, other.SuccessWait)
|
||||
h.VPN.mergeWith(other.VPN)
|
||||
}
|
||||
|
||||
@@ -78,22 +78,22 @@ func (h *Health) MergeWith(other Health) {
|
||||
// settings.
|
||||
func (h *Health) OverrideWith(other Health) {
|
||||
h.ServerAddress = helpers.OverrideWithString(h.ServerAddress, other.ServerAddress)
|
||||
h.ReadHeaderTimeout = helpers.OverrideWithDuration(h.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
h.ReadTimeout = helpers.OverrideWithDuration(h.ReadTimeout, other.ReadTimeout)
|
||||
h.ReadHeaderTimeout = helpers.OverrideWithNumber(h.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
h.ReadTimeout = helpers.OverrideWithNumber(h.ReadTimeout, other.ReadTimeout)
|
||||
h.TargetAddress = helpers.OverrideWithString(h.TargetAddress, other.TargetAddress)
|
||||
h.SuccessWait = helpers.OverrideWithDuration(h.SuccessWait, other.SuccessWait)
|
||||
h.SuccessWait = helpers.OverrideWithNumber(h.SuccessWait, other.SuccessWait)
|
||||
h.VPN.overrideWith(other.VPN)
|
||||
}
|
||||
|
||||
func (h *Health) SetDefaults() {
|
||||
h.ServerAddress = helpers.DefaultString(h.ServerAddress, "127.0.0.1:9999")
|
||||
const defaultReadHeaderTimeout = 100 * time.Millisecond
|
||||
h.ReadHeaderTimeout = helpers.DefaultDuration(h.ReadHeaderTimeout, defaultReadHeaderTimeout)
|
||||
h.ReadHeaderTimeout = helpers.DefaultNumber(h.ReadHeaderTimeout, defaultReadHeaderTimeout)
|
||||
const defaultReadTimeout = 500 * time.Millisecond
|
||||
h.ReadTimeout = helpers.DefaultDuration(h.ReadTimeout, defaultReadTimeout)
|
||||
h.ReadTimeout = helpers.DefaultNumber(h.ReadTimeout, defaultReadTimeout)
|
||||
h.TargetAddress = helpers.DefaultString(h.TargetAddress, "cloudflare.com:443")
|
||||
const defaultSuccessWait = 5 * time.Second
|
||||
h.SuccessWait = helpers.DefaultDuration(h.SuccessWait, defaultSuccessWait)
|
||||
h.SuccessWait = helpers.DefaultNumber(h.SuccessWait, defaultSuccessWait)
|
||||
h.VPN.setDefaults()
|
||||
}
|
||||
|
||||
|
||||
@@ -27,31 +27,31 @@ func (h HealthyWait) validate() (err error) {
|
||||
// unset field of the receiver settings object.
|
||||
func (h *HealthyWait) copy() (copied HealthyWait) {
|
||||
return HealthyWait{
|
||||
Initial: helpers.CopyDurationPtr(h.Initial),
|
||||
Addition: helpers.CopyDurationPtr(h.Addition),
|
||||
Initial: helpers.CopyPointer(h.Initial),
|
||||
Addition: helpers.CopyPointer(h.Addition),
|
||||
}
|
||||
}
|
||||
|
||||
// mergeWith merges the other settings into any
|
||||
// unset field of the receiver settings object.
|
||||
func (h *HealthyWait) mergeWith(other HealthyWait) {
|
||||
h.Initial = helpers.MergeWithDurationPtr(h.Initial, other.Initial)
|
||||
h.Addition = helpers.MergeWithDurationPtr(h.Addition, other.Addition)
|
||||
h.Initial = helpers.MergeWithPointer(h.Initial, other.Initial)
|
||||
h.Addition = helpers.MergeWithPointer(h.Addition, other.Addition)
|
||||
}
|
||||
|
||||
// overrideWith overrides fields of the receiver
|
||||
// settings object with any field set in the other
|
||||
// settings.
|
||||
func (h *HealthyWait) overrideWith(other HealthyWait) {
|
||||
h.Initial = helpers.OverrideWithDurationPtr(h.Initial, other.Initial)
|
||||
h.Addition = helpers.OverrideWithDurationPtr(h.Addition, other.Addition)
|
||||
h.Initial = helpers.OverrideWithPointer(h.Initial, other.Initial)
|
||||
h.Addition = helpers.OverrideWithPointer(h.Addition, other.Addition)
|
||||
}
|
||||
|
||||
func (h *HealthyWait) setDefaults() {
|
||||
const initialDurationDefault = 6 * time.Second
|
||||
const additionDurationDefault = 5 * time.Second
|
||||
h.Initial = helpers.DefaultDurationPtr(h.Initial, initialDurationDefault)
|
||||
h.Addition = helpers.DefaultDurationPtr(h.Addition, additionDurationDefault)
|
||||
h.Initial = helpers.DefaultPointer(h.Initial, initialDurationDefault)
|
||||
h.Addition = helpers.DefaultPointer(h.Addition, additionDurationDefault)
|
||||
}
|
||||
|
||||
func (h HealthyWait) String() string {
|
||||
|
||||
@@ -2,119 +2,19 @@ package helpers
|
||||
|
||||
import (
|
||||
"net/netip"
|
||||
"time"
|
||||
|
||||
"github.com/qdm12/log"
|
||||
"golang.org/x/exp/slices"
|
||||
)
|
||||
|
||||
func CopyStringPtr(original *string) (copied *string) {
|
||||
func CopyPointer[T any](original *T) (copied *T) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
copied = new(string)
|
||||
copied = new(T)
|
||||
*copied = *original
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyBoolPtr(original *bool) (copied *bool) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
copied = new(bool)
|
||||
*copied = *original
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyUint8Ptr(original *uint8) (copied *uint8) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
copied = new(uint8)
|
||||
*copied = *original
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyUint16Ptr(original *uint16) (copied *uint16) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
copied = new(uint16)
|
||||
*copied = *original
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyUint32Ptr(original *uint32) (copied *uint32) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
copied = new(uint32)
|
||||
*copied = *original
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyIntPtr(original *int) (copied *int) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
copied = new(int)
|
||||
*copied = *original
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyDurationPtr(original *time.Duration) (copied *time.Duration) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
copied = new(time.Duration)
|
||||
*copied = *original
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyLogLevelPtr(original *log.Level) (copied *log.Level) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
copied = new(log.Level)
|
||||
*copied = *original
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyStringSlice(original []string) (copied []string) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
copied = make([]string, len(original))
|
||||
copy(copied, original)
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyUint16Slice(original []uint16) (copied []uint16) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
copied = make([]uint16, len(original))
|
||||
copy(copied, original)
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyNetipPrefixesSlice(original []netip.Prefix) (copied []netip.Prefix) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
copied = make([]netip.Prefix, len(original))
|
||||
copy(copied, original)
|
||||
return copied
|
||||
}
|
||||
|
||||
func CopyNetipAddressesSlice(original []netip.Addr) (copied []netip.Addr) {
|
||||
if original == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
copied = make([]netip.Addr, len(original))
|
||||
copy(copied, original)
|
||||
return copied
|
||||
func CopySlice[T string | uint16 | netip.Addr | netip.Prefix](original []T) (copied []T) {
|
||||
return slices.Clone(original)
|
||||
}
|
||||
|
||||
@@ -2,56 +2,14 @@ package helpers
|
||||
|
||||
import (
|
||||
"net/netip"
|
||||
"time"
|
||||
|
||||
"github.com/qdm12/log"
|
||||
)
|
||||
|
||||
func DefaultInt(existing *int, defaultValue int) (
|
||||
result *int) {
|
||||
func DefaultPointer[T any](existing *T, defaultValue T) (
|
||||
result *T) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
}
|
||||
result = new(int)
|
||||
*result = defaultValue
|
||||
return result
|
||||
}
|
||||
|
||||
func DefaultUint8(existing *uint8, defaultValue uint8) (
|
||||
result *uint8) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
}
|
||||
result = new(uint8)
|
||||
*result = defaultValue
|
||||
return result
|
||||
}
|
||||
|
||||
func DefaultUint16(existing *uint16, defaultValue uint16) (
|
||||
result *uint16) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
}
|
||||
result = new(uint16)
|
||||
*result = defaultValue
|
||||
return result
|
||||
}
|
||||
func DefaultUint32(existing *uint32, defaultValue uint32) (
|
||||
result *uint32) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
}
|
||||
result = new(uint32)
|
||||
*result = defaultValue
|
||||
return result
|
||||
}
|
||||
|
||||
func DefaultBool(existing *bool, defaultValue bool) (
|
||||
result *bool) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
}
|
||||
result = new(bool)
|
||||
result = new(T)
|
||||
*result = defaultValue
|
||||
return result
|
||||
}
|
||||
@@ -64,43 +22,14 @@ func DefaultString(existing string, defaultValue string) (
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
func DefaultStringPtr(existing *string, defaultValue string) (result *string) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
}
|
||||
result = new(string)
|
||||
*result = defaultValue
|
||||
return result
|
||||
}
|
||||
|
||||
func DefaultDuration(existing time.Duration,
|
||||
defaultValue time.Duration) (result time.Duration) {
|
||||
func DefaultNumber[T Number](existing T, defaultValue T) ( //nolint:ireturn
|
||||
result T) {
|
||||
if existing != 0 {
|
||||
return existing
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
func DefaultDurationPtr(existing *time.Duration,
|
||||
defaultValue time.Duration) (result *time.Duration) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
}
|
||||
result = new(time.Duration)
|
||||
*result = defaultValue
|
||||
return result
|
||||
}
|
||||
|
||||
func DefaultLogLevel(existing *log.Level,
|
||||
defaultValue log.Level) (result *log.Level) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
}
|
||||
result = new(log.Level)
|
||||
*result = defaultValue
|
||||
return result
|
||||
}
|
||||
|
||||
func DefaultIP(existing netip.Addr, defaultValue netip.Addr) (
|
||||
result netip.Addr) {
|
||||
if existing.IsValid() {
|
||||
|
||||
10
internal/configuration/settings/helpers/generics.go
Normal file
10
internal/configuration/settings/helpers/generics.go
Normal file
@@ -0,0 +1,10 @@
|
||||
package helpers
|
||||
|
||||
import "time"
|
||||
|
||||
type Number interface {
|
||||
uint8 | uint16 | uint32 | uint64 | uint |
|
||||
int8 | int16 | int32 | int64 | int |
|
||||
float32 | float64 |
|
||||
time.Duration
|
||||
}
|
||||
@@ -1,21 +1,17 @@
|
||||
package helpers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/netip"
|
||||
"time"
|
||||
|
||||
"github.com/qdm12/log"
|
||||
)
|
||||
|
||||
func MergeWithBool(existing, other *bool) (result *bool) {
|
||||
func MergeWithPointer[T any](existing, other *T) (result *T) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
} else if other == nil {
|
||||
return nil
|
||||
}
|
||||
result = new(bool)
|
||||
result = new(T)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
@@ -27,114 +23,20 @@ func MergeWithString(existing, other string) (result string) {
|
||||
return other
|
||||
}
|
||||
|
||||
func MergeWithInt(existing, other int) (result int) {
|
||||
func MergeWithNumber[T Number](existing, other T) (result T) { //nolint:ireturn
|
||||
if existing != 0 {
|
||||
return existing
|
||||
}
|
||||
return other
|
||||
}
|
||||
|
||||
func MergeWithFloat64(existing, other float64) (result float64) {
|
||||
if existing != 0 {
|
||||
return existing
|
||||
}
|
||||
return other
|
||||
}
|
||||
|
||||
func MergeWithStringPtr(existing, other *string) (result *string) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
} else if other == nil {
|
||||
return nil
|
||||
}
|
||||
result = new(string)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeWithIntPtr(existing, other *int) (result *int) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
} else if other == nil {
|
||||
return nil
|
||||
}
|
||||
result = new(int)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeWithUint8(existing, other *uint8) (result *uint8) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
} else if other == nil {
|
||||
return nil
|
||||
}
|
||||
result = new(uint8)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeWithUint16(existing, other *uint16) (result *uint16) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
} else if other == nil {
|
||||
return nil
|
||||
}
|
||||
result = new(uint16)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeWithUint32(existing, other *uint32) (result *uint32) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
} else if other == nil {
|
||||
return nil
|
||||
}
|
||||
result = new(uint32)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeWithIP(existing, other netip.Addr) (result netip.Addr) {
|
||||
if existing.IsValid() {
|
||||
return existing
|
||||
} else if !other.IsValid() {
|
||||
return existing
|
||||
}
|
||||
|
||||
result, ok := netip.AddrFromSlice(other.AsSlice())
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("failed copying other address: %s", other))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeWithDuration(existing, other time.Duration) (result time.Duration) {
|
||||
if existing != 0 {
|
||||
return existing
|
||||
}
|
||||
return other
|
||||
}
|
||||
|
||||
func MergeWithDurationPtr(existing, other *time.Duration) (result *time.Duration) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
}
|
||||
return other
|
||||
}
|
||||
|
||||
func MergeWithLogLevel(existing, other *log.Level) (result *log.Level) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
} else if other == nil {
|
||||
return nil
|
||||
}
|
||||
result = new(log.Level)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeWithHTTPHandler(existing, other http.Handler) (result http.Handler) {
|
||||
if existing != nil {
|
||||
return existing
|
||||
@@ -142,13 +44,13 @@ func MergeWithHTTPHandler(existing, other http.Handler) (result http.Handler) {
|
||||
return other
|
||||
}
|
||||
|
||||
func MergeStringSlices(a, b []string) (result []string) {
|
||||
func MergeSlices[T comparable](a, b []T) (result []T) {
|
||||
if a == nil && b == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
seen := make(map[string]struct{}, len(a)+len(b))
|
||||
result = make([]string, 0, len(a)+len(b))
|
||||
seen := make(map[T]struct{}, len(a)+len(b))
|
||||
result = make([]T, 0, len(a)+len(b))
|
||||
for _, s := range a {
|
||||
if _, ok := seen[s]; ok {
|
||||
continue // duplicate
|
||||
@@ -165,79 +67,3 @@ func MergeStringSlices(a, b []string) (result []string) {
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeUint16Slices(a, b []uint16) (result []uint16) {
|
||||
if a == nil && b == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
seen := make(map[uint16]struct{}, len(a)+len(b))
|
||||
result = make([]uint16, 0, len(a)+len(b))
|
||||
for _, n := range a {
|
||||
if _, ok := seen[n]; ok {
|
||||
continue // duplicate
|
||||
}
|
||||
result = append(result, n)
|
||||
seen[n] = struct{}{}
|
||||
}
|
||||
for _, n := range b {
|
||||
if _, ok := seen[n]; ok {
|
||||
continue // duplicate
|
||||
}
|
||||
result = append(result, n)
|
||||
seen[n] = struct{}{}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeNetipAddressesSlices(a, b []netip.Addr) (result []netip.Addr) {
|
||||
if a == nil && b == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
seen := make(map[string]struct{}, len(a)+len(b))
|
||||
result = make([]netip.Addr, 0, len(a)+len(b))
|
||||
for _, ip := range a {
|
||||
key := ip.String()
|
||||
if _, ok := seen[key]; ok {
|
||||
continue // duplicate
|
||||
}
|
||||
result = append(result, ip)
|
||||
seen[key] = struct{}{}
|
||||
}
|
||||
for _, ip := range b {
|
||||
key := ip.String()
|
||||
if _, ok := seen[key]; ok {
|
||||
continue // duplicate
|
||||
}
|
||||
result = append(result, ip)
|
||||
seen[key] = struct{}{}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func MergeNetipPrefixesSlices(a, b []netip.Prefix) (result []netip.Prefix) {
|
||||
if a == nil && b == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
seen := make(map[string]struct{}, len(a)+len(b))
|
||||
result = make([]netip.Prefix, 0, len(a)+len(b))
|
||||
for _, ipPrefix := range a {
|
||||
key := ipPrefix.String()
|
||||
if _, ok := seen[key]; ok {
|
||||
continue // duplicate
|
||||
}
|
||||
result = append(result, ipPrefix)
|
||||
seen[key] = struct{}{}
|
||||
}
|
||||
for _, ipPrefix := range b {
|
||||
key := ipPrefix.String()
|
||||
if _, ok := seen[key]; ok {
|
||||
continue // duplicate
|
||||
}
|
||||
result = append(result, ipPrefix)
|
||||
seen[key] = struct{}{}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -1,19 +1,15 @@
|
||||
package helpers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/netip"
|
||||
"time"
|
||||
|
||||
"github.com/qdm12/log"
|
||||
)
|
||||
|
||||
func OverrideWithBool(existing, other *bool) (result *bool) {
|
||||
func OverrideWithPointer[T any](existing, other *T) (result *T) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = new(bool)
|
||||
result = new(T)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
@@ -25,103 +21,20 @@ func OverrideWithString(existing, other string) (result string) {
|
||||
return other
|
||||
}
|
||||
|
||||
func OverrideWithInt(existing, other int) (result int) {
|
||||
func OverrideWithNumber[T Number](existing, other T) (result T) { //nolint:ireturn
|
||||
if other == 0 {
|
||||
return existing
|
||||
}
|
||||
return other
|
||||
}
|
||||
|
||||
func OverrideWithFloat64(existing, other float64) (result float64) {
|
||||
if other == 0 {
|
||||
return existing
|
||||
}
|
||||
return other
|
||||
}
|
||||
|
||||
func OverrideWithStringPtr(existing, other *string) (result *string) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = new(string)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithIntPtr(existing, other *int) (result *int) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = new(int)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithUint8(existing, other *uint8) (result *uint8) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = new(uint8)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithUint16(existing, other *uint16) (result *uint16) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = new(uint16)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithUint32(existing, other *uint32) (result *uint32) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = new(uint32)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithIP(existing, other netip.Addr) (result netip.Addr) {
|
||||
if !other.IsValid() {
|
||||
return existing
|
||||
}
|
||||
result, ok := netip.AddrFromSlice(other.AsSlice())
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("failed copying other address: %s", other))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithDuration(existing, other time.Duration) (
|
||||
result time.Duration) {
|
||||
if other == 0 {
|
||||
return existing
|
||||
}
|
||||
return other
|
||||
}
|
||||
|
||||
func OverrideWithDurationPtr(existing, other *time.Duration) (
|
||||
result *time.Duration) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = new(time.Duration)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithLogLevel(existing, other *log.Level) (result *log.Level) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = new(log.Level)
|
||||
*result = *other
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithHTTPHandler(existing, other http.Handler) (result http.Handler) {
|
||||
if other != nil {
|
||||
return other
|
||||
@@ -129,38 +42,11 @@ func OverrideWithHTTPHandler(existing, other http.Handler) (result http.Handler)
|
||||
return existing
|
||||
}
|
||||
|
||||
func OverrideWithStringSlice(existing, other []string) (result []string) {
|
||||
func OverrideWithSlice[T any](existing, other []T) (result []T) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = make([]string, len(other))
|
||||
copy(result, other)
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithUint16Slice(existing, other []uint16) (result []uint16) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = make([]uint16, len(other))
|
||||
copy(result, other)
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithNetipAddressesSlice(existing, other []netip.Addr) (result []netip.Addr) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = make([]netip.Addr, len(other))
|
||||
copy(result, other)
|
||||
return result
|
||||
}
|
||||
|
||||
func OverrideWithNetipPrefixesSlice(existing, other []netip.Prefix) (result []netip.Prefix) {
|
||||
if other == nil {
|
||||
return existing
|
||||
}
|
||||
result = make([]netip.Prefix, len(other))
|
||||
result = make([]T, len(other))
|
||||
copy(result, other)
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -56,12 +56,12 @@ func (h HTTPProxy) validate() (err error) {
|
||||
|
||||
func (h *HTTPProxy) copy() (copied HTTPProxy) {
|
||||
return HTTPProxy{
|
||||
User: helpers.CopyStringPtr(h.User),
|
||||
Password: helpers.CopyStringPtr(h.Password),
|
||||
User: helpers.CopyPointer(h.User),
|
||||
Password: helpers.CopyPointer(h.Password),
|
||||
ListeningAddress: h.ListeningAddress,
|
||||
Enabled: helpers.CopyBoolPtr(h.Enabled),
|
||||
Stealth: helpers.CopyBoolPtr(h.Stealth),
|
||||
Log: helpers.CopyBoolPtr(h.Log),
|
||||
Enabled: helpers.CopyPointer(h.Enabled),
|
||||
Stealth: helpers.CopyPointer(h.Stealth),
|
||||
Log: helpers.CopyPointer(h.Log),
|
||||
ReadHeaderTimeout: h.ReadHeaderTimeout,
|
||||
ReadTimeout: h.ReadTimeout,
|
||||
}
|
||||
@@ -70,41 +70,41 @@ func (h *HTTPProxy) copy() (copied HTTPProxy) {
|
||||
// mergeWith merges the other settings into any
|
||||
// unset field of the receiver settings object.
|
||||
func (h *HTTPProxy) mergeWith(other HTTPProxy) {
|
||||
h.User = helpers.MergeWithStringPtr(h.User, other.User)
|
||||
h.Password = helpers.MergeWithStringPtr(h.Password, other.Password)
|
||||
h.User = helpers.MergeWithPointer(h.User, other.User)
|
||||
h.Password = helpers.MergeWithPointer(h.Password, other.Password)
|
||||
h.ListeningAddress = helpers.MergeWithString(h.ListeningAddress, other.ListeningAddress)
|
||||
h.Enabled = helpers.MergeWithBool(h.Enabled, other.Enabled)
|
||||
h.Stealth = helpers.MergeWithBool(h.Stealth, other.Stealth)
|
||||
h.Log = helpers.MergeWithBool(h.Log, other.Log)
|
||||
h.ReadHeaderTimeout = helpers.MergeWithDuration(h.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
h.ReadTimeout = helpers.MergeWithDuration(h.ReadTimeout, other.ReadTimeout)
|
||||
h.Enabled = helpers.MergeWithPointer(h.Enabled, other.Enabled)
|
||||
h.Stealth = helpers.MergeWithPointer(h.Stealth, other.Stealth)
|
||||
h.Log = helpers.MergeWithPointer(h.Log, other.Log)
|
||||
h.ReadHeaderTimeout = helpers.MergeWithNumber(h.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
h.ReadTimeout = helpers.MergeWithNumber(h.ReadTimeout, other.ReadTimeout)
|
||||
}
|
||||
|
||||
// overrideWith overrides fields of the receiver
|
||||
// settings object with any field set in the other
|
||||
// settings.
|
||||
func (h *HTTPProxy) overrideWith(other HTTPProxy) {
|
||||
h.User = helpers.OverrideWithStringPtr(h.User, other.User)
|
||||
h.Password = helpers.OverrideWithStringPtr(h.Password, other.Password)
|
||||
h.User = helpers.OverrideWithPointer(h.User, other.User)
|
||||
h.Password = helpers.OverrideWithPointer(h.Password, other.Password)
|
||||
h.ListeningAddress = helpers.OverrideWithString(h.ListeningAddress, other.ListeningAddress)
|
||||
h.Enabled = helpers.OverrideWithBool(h.Enabled, other.Enabled)
|
||||
h.Stealth = helpers.OverrideWithBool(h.Stealth, other.Stealth)
|
||||
h.Log = helpers.OverrideWithBool(h.Log, other.Log)
|
||||
h.ReadHeaderTimeout = helpers.OverrideWithDuration(h.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
h.ReadTimeout = helpers.OverrideWithDuration(h.ReadTimeout, other.ReadTimeout)
|
||||
h.Enabled = helpers.OverrideWithPointer(h.Enabled, other.Enabled)
|
||||
h.Stealth = helpers.OverrideWithPointer(h.Stealth, other.Stealth)
|
||||
h.Log = helpers.OverrideWithPointer(h.Log, other.Log)
|
||||
h.ReadHeaderTimeout = helpers.OverrideWithNumber(h.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
h.ReadTimeout = helpers.OverrideWithNumber(h.ReadTimeout, other.ReadTimeout)
|
||||
}
|
||||
|
||||
func (h *HTTPProxy) setDefaults() {
|
||||
h.User = helpers.DefaultStringPtr(h.User, "")
|
||||
h.Password = helpers.DefaultStringPtr(h.Password, "")
|
||||
h.User = helpers.DefaultPointer(h.User, "")
|
||||
h.Password = helpers.DefaultPointer(h.Password, "")
|
||||
h.ListeningAddress = helpers.DefaultString(h.ListeningAddress, ":8888")
|
||||
h.Enabled = helpers.DefaultBool(h.Enabled, false)
|
||||
h.Stealth = helpers.DefaultBool(h.Stealth, false)
|
||||
h.Log = helpers.DefaultBool(h.Log, false)
|
||||
h.Enabled = helpers.DefaultPointer(h.Enabled, false)
|
||||
h.Stealth = helpers.DefaultPointer(h.Stealth, false)
|
||||
h.Log = helpers.DefaultPointer(h.Log, false)
|
||||
const defaultReadHeaderTimeout = time.Second
|
||||
h.ReadHeaderTimeout = helpers.DefaultDuration(h.ReadHeaderTimeout, defaultReadHeaderTimeout)
|
||||
h.ReadHeaderTimeout = helpers.DefaultNumber(h.ReadHeaderTimeout, defaultReadHeaderTimeout)
|
||||
const defaultReadTimeout = 3 * time.Second
|
||||
h.ReadTimeout = helpers.DefaultDuration(h.ReadTimeout, defaultReadTimeout)
|
||||
h.ReadTimeout = helpers.DefaultNumber(h.ReadTimeout, defaultReadTimeout)
|
||||
}
|
||||
|
||||
func (h HTTPProxy) String() string {
|
||||
|
||||
@@ -19,25 +19,25 @@ func (l Log) validate() (err error) {
|
||||
|
||||
func (l *Log) copy() (copied Log) {
|
||||
return Log{
|
||||
Level: helpers.CopyLogLevelPtr(l.Level),
|
||||
Level: helpers.CopyPointer(l.Level),
|
||||
}
|
||||
}
|
||||
|
||||
// mergeWith merges the other settings into any
|
||||
// unset field of the receiver settings object.
|
||||
func (l *Log) mergeWith(other Log) {
|
||||
l.Level = helpers.MergeWithLogLevel(l.Level, other.Level)
|
||||
l.Level = helpers.MergeWithPointer(l.Level, other.Level)
|
||||
}
|
||||
|
||||
// overrideWith overrides fields of the receiver
|
||||
// settings object with any field set in the other
|
||||
// settings.
|
||||
func (l *Log) overrideWith(other Log) {
|
||||
l.Level = helpers.OverrideWithLogLevel(l.Level, other.Level)
|
||||
l.Level = helpers.OverrideWithPointer(l.Level, other.Level)
|
||||
}
|
||||
|
||||
func (l *Log) setDefaults() {
|
||||
l.Level = helpers.DefaultLogLevel(l.Level, log.LevelInfo)
|
||||
l.Level = helpers.DefaultPointer(l.Level, log.LevelInfo)
|
||||
}
|
||||
|
||||
func (l Log) String() string {
|
||||
|
||||
@@ -244,21 +244,21 @@ func validateOpenVPNEncryptedKey(vpnProvider,
|
||||
func (o *OpenVPN) copy() (copied OpenVPN) {
|
||||
return OpenVPN{
|
||||
Version: o.Version,
|
||||
User: helpers.CopyStringPtr(o.User),
|
||||
Password: helpers.CopyStringPtr(o.Password),
|
||||
ConfFile: helpers.CopyStringPtr(o.ConfFile),
|
||||
Ciphers: helpers.CopyStringSlice(o.Ciphers),
|
||||
Auth: helpers.CopyStringPtr(o.Auth),
|
||||
Cert: helpers.CopyStringPtr(o.Cert),
|
||||
Key: helpers.CopyStringPtr(o.Key),
|
||||
EncryptedKey: helpers.CopyStringPtr(o.EncryptedKey),
|
||||
KeyPassphrase: helpers.CopyStringPtr(o.KeyPassphrase),
|
||||
PIAEncPreset: helpers.CopyStringPtr(o.PIAEncPreset),
|
||||
MSSFix: helpers.CopyUint16Ptr(o.MSSFix),
|
||||
User: helpers.CopyPointer(o.User),
|
||||
Password: helpers.CopyPointer(o.Password),
|
||||
ConfFile: helpers.CopyPointer(o.ConfFile),
|
||||
Ciphers: helpers.CopySlice(o.Ciphers),
|
||||
Auth: helpers.CopyPointer(o.Auth),
|
||||
Cert: helpers.CopyPointer(o.Cert),
|
||||
Key: helpers.CopyPointer(o.Key),
|
||||
EncryptedKey: helpers.CopyPointer(o.EncryptedKey),
|
||||
KeyPassphrase: helpers.CopyPointer(o.KeyPassphrase),
|
||||
PIAEncPreset: helpers.CopyPointer(o.PIAEncPreset),
|
||||
MSSFix: helpers.CopyPointer(o.MSSFix),
|
||||
Interface: o.Interface,
|
||||
ProcessUser: o.ProcessUser,
|
||||
Verbosity: helpers.CopyIntPtr(o.Verbosity),
|
||||
Flags: helpers.CopyStringSlice(o.Flags),
|
||||
Verbosity: helpers.CopyPointer(o.Verbosity),
|
||||
Flags: helpers.CopySlice(o.Flags),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,21 +266,21 @@ func (o *OpenVPN) copy() (copied OpenVPN) {
|
||||
// unset field of the receiver settings object.
|
||||
func (o *OpenVPN) mergeWith(other OpenVPN) {
|
||||
o.Version = helpers.MergeWithString(o.Version, other.Version)
|
||||
o.User = helpers.MergeWithStringPtr(o.User, other.User)
|
||||
o.Password = helpers.MergeWithStringPtr(o.Password, other.Password)
|
||||
o.ConfFile = helpers.MergeWithStringPtr(o.ConfFile, other.ConfFile)
|
||||
o.Ciphers = helpers.MergeStringSlices(o.Ciphers, other.Ciphers)
|
||||
o.Auth = helpers.MergeWithStringPtr(o.Auth, other.Auth)
|
||||
o.Cert = helpers.MergeWithStringPtr(o.Cert, other.Cert)
|
||||
o.Key = helpers.MergeWithStringPtr(o.Key, other.Key)
|
||||
o.EncryptedKey = helpers.MergeWithStringPtr(o.EncryptedKey, other.EncryptedKey)
|
||||
o.KeyPassphrase = helpers.MergeWithStringPtr(o.KeyPassphrase, other.KeyPassphrase)
|
||||
o.PIAEncPreset = helpers.MergeWithStringPtr(o.PIAEncPreset, other.PIAEncPreset)
|
||||
o.MSSFix = helpers.MergeWithUint16(o.MSSFix, other.MSSFix)
|
||||
o.User = helpers.MergeWithPointer(o.User, other.User)
|
||||
o.Password = helpers.MergeWithPointer(o.Password, other.Password)
|
||||
o.ConfFile = helpers.MergeWithPointer(o.ConfFile, other.ConfFile)
|
||||
o.Ciphers = helpers.MergeSlices(o.Ciphers, other.Ciphers)
|
||||
o.Auth = helpers.MergeWithPointer(o.Auth, other.Auth)
|
||||
o.Cert = helpers.MergeWithPointer(o.Cert, other.Cert)
|
||||
o.Key = helpers.MergeWithPointer(o.Key, other.Key)
|
||||
o.EncryptedKey = helpers.MergeWithPointer(o.EncryptedKey, other.EncryptedKey)
|
||||
o.KeyPassphrase = helpers.MergeWithPointer(o.KeyPassphrase, other.KeyPassphrase)
|
||||
o.PIAEncPreset = helpers.MergeWithPointer(o.PIAEncPreset, other.PIAEncPreset)
|
||||
o.MSSFix = helpers.MergeWithPointer(o.MSSFix, other.MSSFix)
|
||||
o.Interface = helpers.MergeWithString(o.Interface, other.Interface)
|
||||
o.ProcessUser = helpers.MergeWithString(o.ProcessUser, other.ProcessUser)
|
||||
o.Verbosity = helpers.MergeWithIntPtr(o.Verbosity, other.Verbosity)
|
||||
o.Flags = helpers.MergeStringSlices(o.Flags, other.Flags)
|
||||
o.Verbosity = helpers.MergeWithPointer(o.Verbosity, other.Verbosity)
|
||||
o.Flags = helpers.MergeSlices(o.Flags, other.Flags)
|
||||
}
|
||||
|
||||
// overrideWith overrides fields of the receiver
|
||||
@@ -288,48 +288,48 @@ func (o *OpenVPN) mergeWith(other OpenVPN) {
|
||||
// settings.
|
||||
func (o *OpenVPN) overrideWith(other OpenVPN) {
|
||||
o.Version = helpers.OverrideWithString(o.Version, other.Version)
|
||||
o.User = helpers.OverrideWithStringPtr(o.User, other.User)
|
||||
o.Password = helpers.OverrideWithStringPtr(o.Password, other.Password)
|
||||
o.ConfFile = helpers.OverrideWithStringPtr(o.ConfFile, other.ConfFile)
|
||||
o.Ciphers = helpers.OverrideWithStringSlice(o.Ciphers, other.Ciphers)
|
||||
o.Auth = helpers.OverrideWithStringPtr(o.Auth, other.Auth)
|
||||
o.Cert = helpers.OverrideWithStringPtr(o.Cert, other.Cert)
|
||||
o.Key = helpers.OverrideWithStringPtr(o.Key, other.Key)
|
||||
o.EncryptedKey = helpers.OverrideWithStringPtr(o.EncryptedKey, other.EncryptedKey)
|
||||
o.KeyPassphrase = helpers.OverrideWithStringPtr(o.KeyPassphrase, other.KeyPassphrase)
|
||||
o.PIAEncPreset = helpers.OverrideWithStringPtr(o.PIAEncPreset, other.PIAEncPreset)
|
||||
o.MSSFix = helpers.OverrideWithUint16(o.MSSFix, other.MSSFix)
|
||||
o.User = helpers.OverrideWithPointer(o.User, other.User)
|
||||
o.Password = helpers.OverrideWithPointer(o.Password, other.Password)
|
||||
o.ConfFile = helpers.OverrideWithPointer(o.ConfFile, other.ConfFile)
|
||||
o.Ciphers = helpers.OverrideWithSlice(o.Ciphers, other.Ciphers)
|
||||
o.Auth = helpers.OverrideWithPointer(o.Auth, other.Auth)
|
||||
o.Cert = helpers.OverrideWithPointer(o.Cert, other.Cert)
|
||||
o.Key = helpers.OverrideWithPointer(o.Key, other.Key)
|
||||
o.EncryptedKey = helpers.OverrideWithPointer(o.EncryptedKey, other.EncryptedKey)
|
||||
o.KeyPassphrase = helpers.OverrideWithPointer(o.KeyPassphrase, other.KeyPassphrase)
|
||||
o.PIAEncPreset = helpers.OverrideWithPointer(o.PIAEncPreset, other.PIAEncPreset)
|
||||
o.MSSFix = helpers.OverrideWithPointer(o.MSSFix, other.MSSFix)
|
||||
o.Interface = helpers.OverrideWithString(o.Interface, other.Interface)
|
||||
o.ProcessUser = helpers.OverrideWithString(o.ProcessUser, other.ProcessUser)
|
||||
o.Verbosity = helpers.OverrideWithIntPtr(o.Verbosity, other.Verbosity)
|
||||
o.Flags = helpers.OverrideWithStringSlice(o.Flags, other.Flags)
|
||||
o.Verbosity = helpers.OverrideWithPointer(o.Verbosity, other.Verbosity)
|
||||
o.Flags = helpers.OverrideWithSlice(o.Flags, other.Flags)
|
||||
}
|
||||
|
||||
func (o *OpenVPN) setDefaults(vpnProvider string) {
|
||||
o.Version = helpers.DefaultString(o.Version, openvpn.Openvpn25)
|
||||
o.User = helpers.DefaultStringPtr(o.User, "")
|
||||
o.User = helpers.DefaultPointer(o.User, "")
|
||||
if vpnProvider == providers.Mullvad {
|
||||
o.Password = helpers.DefaultStringPtr(o.Password, "m")
|
||||
o.Password = helpers.DefaultPointer(o.Password, "m")
|
||||
} else {
|
||||
o.Password = helpers.DefaultStringPtr(o.Password, "")
|
||||
o.Password = helpers.DefaultPointer(o.Password, "")
|
||||
}
|
||||
|
||||
o.ConfFile = helpers.DefaultStringPtr(o.ConfFile, "")
|
||||
o.Auth = helpers.DefaultStringPtr(o.Auth, "")
|
||||
o.Cert = helpers.DefaultStringPtr(o.Cert, "")
|
||||
o.Key = helpers.DefaultStringPtr(o.Key, "")
|
||||
o.EncryptedKey = helpers.DefaultStringPtr(o.EncryptedKey, "")
|
||||
o.KeyPassphrase = helpers.DefaultStringPtr(o.KeyPassphrase, "")
|
||||
o.ConfFile = helpers.DefaultPointer(o.ConfFile, "")
|
||||
o.Auth = helpers.DefaultPointer(o.Auth, "")
|
||||
o.Cert = helpers.DefaultPointer(o.Cert, "")
|
||||
o.Key = helpers.DefaultPointer(o.Key, "")
|
||||
o.EncryptedKey = helpers.DefaultPointer(o.EncryptedKey, "")
|
||||
o.KeyPassphrase = helpers.DefaultPointer(o.KeyPassphrase, "")
|
||||
|
||||
var defaultEncPreset string
|
||||
if vpnProvider == providers.PrivateInternetAccess {
|
||||
defaultEncPreset = presets.Strong
|
||||
}
|
||||
o.PIAEncPreset = helpers.DefaultStringPtr(o.PIAEncPreset, defaultEncPreset)
|
||||
o.MSSFix = helpers.DefaultUint16(o.MSSFix, 0)
|
||||
o.PIAEncPreset = helpers.DefaultPointer(o.PIAEncPreset, defaultEncPreset)
|
||||
o.MSSFix = helpers.DefaultPointer(o.MSSFix, 0)
|
||||
o.Interface = helpers.DefaultString(o.Interface, "tun0")
|
||||
o.ProcessUser = helpers.DefaultString(o.ProcessUser, "root")
|
||||
o.Verbosity = helpers.DefaultInt(o.Verbosity, 1)
|
||||
o.Verbosity = helpers.DefaultPointer(o.Verbosity, 1)
|
||||
}
|
||||
|
||||
func (o OpenVPN) String() string {
|
||||
|
||||
@@ -130,37 +130,37 @@ func (o OpenVPNSelection) validate(vpnProvider string) (err error) {
|
||||
|
||||
func (o *OpenVPNSelection) copy() (copied OpenVPNSelection) {
|
||||
return OpenVPNSelection{
|
||||
ConfFile: helpers.CopyStringPtr(o.ConfFile),
|
||||
TCP: helpers.CopyBoolPtr(o.TCP),
|
||||
CustomPort: helpers.CopyUint16Ptr(o.CustomPort),
|
||||
PIAEncPreset: helpers.CopyStringPtr(o.PIAEncPreset),
|
||||
ConfFile: helpers.CopyPointer(o.ConfFile),
|
||||
TCP: helpers.CopyPointer(o.TCP),
|
||||
CustomPort: helpers.CopyPointer(o.CustomPort),
|
||||
PIAEncPreset: helpers.CopyPointer(o.PIAEncPreset),
|
||||
}
|
||||
}
|
||||
|
||||
func (o *OpenVPNSelection) mergeWith(other OpenVPNSelection) {
|
||||
o.ConfFile = helpers.MergeWithStringPtr(o.ConfFile, other.ConfFile)
|
||||
o.TCP = helpers.MergeWithBool(o.TCP, other.TCP)
|
||||
o.CustomPort = helpers.MergeWithUint16(o.CustomPort, other.CustomPort)
|
||||
o.PIAEncPreset = helpers.MergeWithStringPtr(o.PIAEncPreset, other.PIAEncPreset)
|
||||
o.ConfFile = helpers.MergeWithPointer(o.ConfFile, other.ConfFile)
|
||||
o.TCP = helpers.MergeWithPointer(o.TCP, other.TCP)
|
||||
o.CustomPort = helpers.MergeWithPointer(o.CustomPort, other.CustomPort)
|
||||
o.PIAEncPreset = helpers.MergeWithPointer(o.PIAEncPreset, other.PIAEncPreset)
|
||||
}
|
||||
|
||||
func (o *OpenVPNSelection) overrideWith(other OpenVPNSelection) {
|
||||
o.ConfFile = helpers.OverrideWithStringPtr(o.ConfFile, other.ConfFile)
|
||||
o.TCP = helpers.OverrideWithBool(o.TCP, other.TCP)
|
||||
o.CustomPort = helpers.OverrideWithUint16(o.CustomPort, other.CustomPort)
|
||||
o.PIAEncPreset = helpers.OverrideWithStringPtr(o.PIAEncPreset, other.PIAEncPreset)
|
||||
o.ConfFile = helpers.OverrideWithPointer(o.ConfFile, other.ConfFile)
|
||||
o.TCP = helpers.OverrideWithPointer(o.TCP, other.TCP)
|
||||
o.CustomPort = helpers.OverrideWithPointer(o.CustomPort, other.CustomPort)
|
||||
o.PIAEncPreset = helpers.OverrideWithPointer(o.PIAEncPreset, other.PIAEncPreset)
|
||||
}
|
||||
|
||||
func (o *OpenVPNSelection) setDefaults(vpnProvider string) {
|
||||
o.ConfFile = helpers.DefaultStringPtr(o.ConfFile, "")
|
||||
o.TCP = helpers.DefaultBool(o.TCP, false)
|
||||
o.CustomPort = helpers.DefaultUint16(o.CustomPort, 0)
|
||||
o.ConfFile = helpers.DefaultPointer(o.ConfFile, "")
|
||||
o.TCP = helpers.DefaultPointer(o.TCP, false)
|
||||
o.CustomPort = helpers.DefaultPointer(o.CustomPort, 0)
|
||||
|
||||
var defaultEncPreset string
|
||||
if vpnProvider == providers.PrivateInternetAccess {
|
||||
defaultEncPreset = presets.Strong
|
||||
}
|
||||
o.PIAEncPreset = helpers.DefaultStringPtr(o.PIAEncPreset, defaultEncPreset)
|
||||
o.PIAEncPreset = helpers.DefaultPointer(o.PIAEncPreset, defaultEncPreset)
|
||||
}
|
||||
|
||||
func (o OpenVPNSelection) String() string {
|
||||
|
||||
@@ -47,24 +47,24 @@ func (p PortForwarding) validate(vpnProvider string) (err error) {
|
||||
|
||||
func (p *PortForwarding) copy() (copied PortForwarding) {
|
||||
return PortForwarding{
|
||||
Enabled: helpers.CopyBoolPtr(p.Enabled),
|
||||
Filepath: helpers.CopyStringPtr(p.Filepath),
|
||||
Enabled: helpers.CopyPointer(p.Enabled),
|
||||
Filepath: helpers.CopyPointer(p.Filepath),
|
||||
}
|
||||
}
|
||||
|
||||
func (p *PortForwarding) mergeWith(other PortForwarding) {
|
||||
p.Enabled = helpers.MergeWithBool(p.Enabled, other.Enabled)
|
||||
p.Filepath = helpers.MergeWithStringPtr(p.Filepath, other.Filepath)
|
||||
p.Enabled = helpers.MergeWithPointer(p.Enabled, other.Enabled)
|
||||
p.Filepath = helpers.MergeWithPointer(p.Filepath, other.Filepath)
|
||||
}
|
||||
|
||||
func (p *PortForwarding) overrideWith(other PortForwarding) {
|
||||
p.Enabled = helpers.OverrideWithBool(p.Enabled, other.Enabled)
|
||||
p.Filepath = helpers.OverrideWithStringPtr(p.Filepath, other.Filepath)
|
||||
p.Enabled = helpers.OverrideWithPointer(p.Enabled, other.Enabled)
|
||||
p.Filepath = helpers.OverrideWithPointer(p.Filepath, other.Filepath)
|
||||
}
|
||||
|
||||
func (p *PortForwarding) setDefaults() {
|
||||
p.Enabled = helpers.DefaultBool(p.Enabled, false)
|
||||
p.Filepath = helpers.DefaultStringPtr(p.Filepath, "/tmp/gluetun/forwarded_port")
|
||||
p.Enabled = helpers.DefaultPointer(p.Enabled, false)
|
||||
p.Filepath = helpers.DefaultPointer(p.Filepath, "/tmp/gluetun/forwarded_port")
|
||||
}
|
||||
|
||||
func (p PortForwarding) String() string {
|
||||
|
||||
@@ -58,26 +58,26 @@ func (p *Provider) validate(vpnType string, storage Storage) (err error) {
|
||||
|
||||
func (p *Provider) copy() (copied Provider) {
|
||||
return Provider{
|
||||
Name: helpers.CopyStringPtr(p.Name),
|
||||
Name: helpers.CopyPointer(p.Name),
|
||||
ServerSelection: p.ServerSelection.copy(),
|
||||
PortForwarding: p.PortForwarding.copy(),
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Provider) mergeWith(other Provider) {
|
||||
p.Name = helpers.MergeWithStringPtr(p.Name, other.Name)
|
||||
p.Name = helpers.MergeWithPointer(p.Name, other.Name)
|
||||
p.ServerSelection.mergeWith(other.ServerSelection)
|
||||
p.PortForwarding.mergeWith(other.PortForwarding)
|
||||
}
|
||||
|
||||
func (p *Provider) overrideWith(other Provider) {
|
||||
p.Name = helpers.OverrideWithStringPtr(p.Name, other.Name)
|
||||
p.Name = helpers.OverrideWithPointer(p.Name, other.Name)
|
||||
p.ServerSelection.overrideWith(other.ServerSelection)
|
||||
p.PortForwarding.overrideWith(other.PortForwarding)
|
||||
}
|
||||
|
||||
func (p *Provider) setDefaults() {
|
||||
p.Name = helpers.DefaultStringPtr(p.Name, providers.PrivateInternetAccess)
|
||||
p.Name = helpers.DefaultPointer(p.Name, providers.PrivateInternetAccess)
|
||||
p.ServerSelection.setDefaults(*p.Name)
|
||||
p.PortForwarding.setDefaults()
|
||||
}
|
||||
|
||||
@@ -42,25 +42,25 @@ func (p PublicIP) validate() (err error) {
|
||||
|
||||
func (p *PublicIP) copy() (copied PublicIP) {
|
||||
return PublicIP{
|
||||
Period: helpers.CopyDurationPtr(p.Period),
|
||||
IPFilepath: helpers.CopyStringPtr(p.IPFilepath),
|
||||
Period: helpers.CopyPointer(p.Period),
|
||||
IPFilepath: helpers.CopyPointer(p.IPFilepath),
|
||||
}
|
||||
}
|
||||
|
||||
func (p *PublicIP) mergeWith(other PublicIP) {
|
||||
p.Period = helpers.MergeWithDurationPtr(p.Period, other.Period)
|
||||
p.IPFilepath = helpers.MergeWithStringPtr(p.IPFilepath, other.IPFilepath)
|
||||
p.Period = helpers.MergeWithPointer(p.Period, other.Period)
|
||||
p.IPFilepath = helpers.MergeWithPointer(p.IPFilepath, other.IPFilepath)
|
||||
}
|
||||
|
||||
func (p *PublicIP) overrideWith(other PublicIP) {
|
||||
p.Period = helpers.OverrideWithDurationPtr(p.Period, other.Period)
|
||||
p.IPFilepath = helpers.OverrideWithStringPtr(p.IPFilepath, other.IPFilepath)
|
||||
p.Period = helpers.OverrideWithPointer(p.Period, other.Period)
|
||||
p.IPFilepath = helpers.OverrideWithPointer(p.IPFilepath, other.IPFilepath)
|
||||
}
|
||||
|
||||
func (p *PublicIP) setDefaults() {
|
||||
const defaultPeriod = 12 * time.Hour
|
||||
p.Period = helpers.DefaultDurationPtr(p.Period, defaultPeriod)
|
||||
p.IPFilepath = helpers.DefaultStringPtr(p.IPFilepath, "/tmp/gluetun/ip")
|
||||
p.Period = helpers.DefaultPointer(p.Period, defaultPeriod)
|
||||
p.IPFilepath = helpers.DefaultPointer(p.IPFilepath, "/tmp/gluetun/ip")
|
||||
}
|
||||
|
||||
func (p PublicIP) String() string {
|
||||
|
||||
@@ -43,29 +43,29 @@ func (c ControlServer) validate() (err error) {
|
||||
|
||||
func (c *ControlServer) copy() (copied ControlServer) {
|
||||
return ControlServer{
|
||||
Address: helpers.CopyStringPtr(c.Address),
|
||||
Log: helpers.CopyBoolPtr(c.Log),
|
||||
Address: helpers.CopyPointer(c.Address),
|
||||
Log: helpers.CopyPointer(c.Log),
|
||||
}
|
||||
}
|
||||
|
||||
// mergeWith merges the other settings into any
|
||||
// unset field of the receiver settings object.
|
||||
func (c *ControlServer) mergeWith(other ControlServer) {
|
||||
c.Address = helpers.MergeWithStringPtr(c.Address, other.Address)
|
||||
c.Log = helpers.MergeWithBool(c.Log, other.Log)
|
||||
c.Address = helpers.MergeWithPointer(c.Address, other.Address)
|
||||
c.Log = helpers.MergeWithPointer(c.Log, other.Log)
|
||||
}
|
||||
|
||||
// overrideWith overrides fields of the receiver
|
||||
// settings object with any field set in the other
|
||||
// settings.
|
||||
func (c *ControlServer) overrideWith(other ControlServer) {
|
||||
c.Address = helpers.OverrideWithStringPtr(c.Address, other.Address)
|
||||
c.Log = helpers.OverrideWithBool(c.Log, other.Log)
|
||||
c.Address = helpers.OverrideWithPointer(c.Address, other.Address)
|
||||
c.Log = helpers.OverrideWithPointer(c.Log, other.Log)
|
||||
}
|
||||
|
||||
func (c *ControlServer) setDefaults() {
|
||||
c.Address = helpers.DefaultStringPtr(c.Address, ":8000")
|
||||
c.Log = helpers.DefaultBool(c.Log, true)
|
||||
c.Address = helpers.DefaultPointer(c.Address, ":8000")
|
||||
c.Log = helpers.DefaultPointer(c.Log, true)
|
||||
}
|
||||
|
||||
func (c ControlServer) String() string {
|
||||
|
||||
@@ -203,18 +203,18 @@ func (ss *ServerSelection) copy() (copied ServerSelection) {
|
||||
return ServerSelection{
|
||||
VPN: ss.VPN,
|
||||
TargetIP: ss.TargetIP,
|
||||
Countries: helpers.CopyStringSlice(ss.Countries),
|
||||
Regions: helpers.CopyStringSlice(ss.Regions),
|
||||
Cities: helpers.CopyStringSlice(ss.Cities),
|
||||
ISPs: helpers.CopyStringSlice(ss.ISPs),
|
||||
Hostnames: helpers.CopyStringSlice(ss.Hostnames),
|
||||
Names: helpers.CopyStringSlice(ss.Names),
|
||||
Numbers: helpers.CopyUint16Slice(ss.Numbers),
|
||||
OwnedOnly: helpers.CopyBoolPtr(ss.OwnedOnly),
|
||||
FreeOnly: helpers.CopyBoolPtr(ss.FreeOnly),
|
||||
PremiumOnly: helpers.CopyBoolPtr(ss.PremiumOnly),
|
||||
StreamOnly: helpers.CopyBoolPtr(ss.StreamOnly),
|
||||
MultiHopOnly: helpers.CopyBoolPtr(ss.MultiHopOnly),
|
||||
Countries: helpers.CopySlice(ss.Countries),
|
||||
Regions: helpers.CopySlice(ss.Regions),
|
||||
Cities: helpers.CopySlice(ss.Cities),
|
||||
ISPs: helpers.CopySlice(ss.ISPs),
|
||||
Hostnames: helpers.CopySlice(ss.Hostnames),
|
||||
Names: helpers.CopySlice(ss.Names),
|
||||
Numbers: helpers.CopySlice(ss.Numbers),
|
||||
OwnedOnly: helpers.CopyPointer(ss.OwnedOnly),
|
||||
FreeOnly: helpers.CopyPointer(ss.FreeOnly),
|
||||
PremiumOnly: helpers.CopyPointer(ss.PremiumOnly),
|
||||
StreamOnly: helpers.CopyPointer(ss.StreamOnly),
|
||||
MultiHopOnly: helpers.CopyPointer(ss.MultiHopOnly),
|
||||
OpenVPN: ss.OpenVPN.copy(),
|
||||
Wireguard: ss.Wireguard.copy(),
|
||||
}
|
||||
@@ -223,18 +223,18 @@ func (ss *ServerSelection) copy() (copied ServerSelection) {
|
||||
func (ss *ServerSelection) mergeWith(other ServerSelection) {
|
||||
ss.VPN = helpers.MergeWithString(ss.VPN, other.VPN)
|
||||
ss.TargetIP = helpers.MergeWithIP(ss.TargetIP, other.TargetIP)
|
||||
ss.Countries = helpers.MergeStringSlices(ss.Countries, other.Countries)
|
||||
ss.Regions = helpers.MergeStringSlices(ss.Regions, other.Regions)
|
||||
ss.Cities = helpers.MergeStringSlices(ss.Cities, other.Cities)
|
||||
ss.ISPs = helpers.MergeStringSlices(ss.ISPs, other.ISPs)
|
||||
ss.Hostnames = helpers.MergeStringSlices(ss.Hostnames, other.Hostnames)
|
||||
ss.Names = helpers.MergeStringSlices(ss.Names, other.Names)
|
||||
ss.Numbers = helpers.MergeUint16Slices(ss.Numbers, other.Numbers)
|
||||
ss.OwnedOnly = helpers.MergeWithBool(ss.OwnedOnly, other.OwnedOnly)
|
||||
ss.FreeOnly = helpers.MergeWithBool(ss.FreeOnly, other.FreeOnly)
|
||||
ss.PremiumOnly = helpers.MergeWithBool(ss.PremiumOnly, other.PremiumOnly)
|
||||
ss.StreamOnly = helpers.MergeWithBool(ss.StreamOnly, other.StreamOnly)
|
||||
ss.MultiHopOnly = helpers.MergeWithBool(ss.MultiHopOnly, other.MultiHopOnly)
|
||||
ss.Countries = helpers.MergeSlices(ss.Countries, other.Countries)
|
||||
ss.Regions = helpers.MergeSlices(ss.Regions, other.Regions)
|
||||
ss.Cities = helpers.MergeSlices(ss.Cities, other.Cities)
|
||||
ss.ISPs = helpers.MergeSlices(ss.ISPs, other.ISPs)
|
||||
ss.Hostnames = helpers.MergeSlices(ss.Hostnames, other.Hostnames)
|
||||
ss.Names = helpers.MergeSlices(ss.Names, other.Names)
|
||||
ss.Numbers = helpers.MergeSlices(ss.Numbers, other.Numbers)
|
||||
ss.OwnedOnly = helpers.MergeWithPointer(ss.OwnedOnly, other.OwnedOnly)
|
||||
ss.FreeOnly = helpers.MergeWithPointer(ss.FreeOnly, other.FreeOnly)
|
||||
ss.PremiumOnly = helpers.MergeWithPointer(ss.PremiumOnly, other.PremiumOnly)
|
||||
ss.StreamOnly = helpers.MergeWithPointer(ss.StreamOnly, other.StreamOnly)
|
||||
ss.MultiHopOnly = helpers.MergeWithPointer(ss.MultiHopOnly, other.MultiHopOnly)
|
||||
|
||||
ss.OpenVPN.mergeWith(other.OpenVPN)
|
||||
ss.Wireguard.mergeWith(other.Wireguard)
|
||||
@@ -243,18 +243,18 @@ func (ss *ServerSelection) mergeWith(other ServerSelection) {
|
||||
func (ss *ServerSelection) overrideWith(other ServerSelection) {
|
||||
ss.VPN = helpers.OverrideWithString(ss.VPN, other.VPN)
|
||||
ss.TargetIP = helpers.OverrideWithIP(ss.TargetIP, other.TargetIP)
|
||||
ss.Countries = helpers.OverrideWithStringSlice(ss.Countries, other.Countries)
|
||||
ss.Regions = helpers.OverrideWithStringSlice(ss.Regions, other.Regions)
|
||||
ss.Cities = helpers.OverrideWithStringSlice(ss.Cities, other.Cities)
|
||||
ss.ISPs = helpers.OverrideWithStringSlice(ss.ISPs, other.ISPs)
|
||||
ss.Hostnames = helpers.OverrideWithStringSlice(ss.Hostnames, other.Hostnames)
|
||||
ss.Names = helpers.OverrideWithStringSlice(ss.Names, other.Names)
|
||||
ss.Numbers = helpers.OverrideWithUint16Slice(ss.Numbers, other.Numbers)
|
||||
ss.OwnedOnly = helpers.OverrideWithBool(ss.OwnedOnly, other.OwnedOnly)
|
||||
ss.FreeOnly = helpers.OverrideWithBool(ss.FreeOnly, other.FreeOnly)
|
||||
ss.PremiumOnly = helpers.OverrideWithBool(ss.PremiumOnly, other.PremiumOnly)
|
||||
ss.StreamOnly = helpers.OverrideWithBool(ss.StreamOnly, other.StreamOnly)
|
||||
ss.MultiHopOnly = helpers.OverrideWithBool(ss.MultiHopOnly, other.MultiHopOnly)
|
||||
ss.Countries = helpers.OverrideWithSlice(ss.Countries, other.Countries)
|
||||
ss.Regions = helpers.OverrideWithSlice(ss.Regions, other.Regions)
|
||||
ss.Cities = helpers.OverrideWithSlice(ss.Cities, other.Cities)
|
||||
ss.ISPs = helpers.OverrideWithSlice(ss.ISPs, other.ISPs)
|
||||
ss.Hostnames = helpers.OverrideWithSlice(ss.Hostnames, other.Hostnames)
|
||||
ss.Names = helpers.OverrideWithSlice(ss.Names, other.Names)
|
||||
ss.Numbers = helpers.OverrideWithSlice(ss.Numbers, other.Numbers)
|
||||
ss.OwnedOnly = helpers.OverrideWithPointer(ss.OwnedOnly, other.OwnedOnly)
|
||||
ss.FreeOnly = helpers.OverrideWithPointer(ss.FreeOnly, other.FreeOnly)
|
||||
ss.PremiumOnly = helpers.OverrideWithPointer(ss.PremiumOnly, other.PremiumOnly)
|
||||
ss.StreamOnly = helpers.OverrideWithPointer(ss.StreamOnly, other.StreamOnly)
|
||||
ss.MultiHopOnly = helpers.OverrideWithPointer(ss.MultiHopOnly, other.MultiHopOnly)
|
||||
ss.OpenVPN.overrideWith(other.OpenVPN)
|
||||
ss.Wireguard.overrideWith(other.Wireguard)
|
||||
}
|
||||
@@ -262,11 +262,11 @@ func (ss *ServerSelection) overrideWith(other ServerSelection) {
|
||||
func (ss *ServerSelection) setDefaults(vpnProvider string) {
|
||||
ss.VPN = helpers.DefaultString(ss.VPN, vpn.OpenVPN)
|
||||
ss.TargetIP = helpers.DefaultIP(ss.TargetIP, netip.IPv4Unspecified())
|
||||
ss.OwnedOnly = helpers.DefaultBool(ss.OwnedOnly, false)
|
||||
ss.FreeOnly = helpers.DefaultBool(ss.FreeOnly, false)
|
||||
ss.PremiumOnly = helpers.DefaultBool(ss.PremiumOnly, false)
|
||||
ss.StreamOnly = helpers.DefaultBool(ss.StreamOnly, false)
|
||||
ss.MultiHopOnly = helpers.DefaultBool(ss.MultiHopOnly, false)
|
||||
ss.OwnedOnly = helpers.DefaultPointer(ss.OwnedOnly, false)
|
||||
ss.FreeOnly = helpers.DefaultPointer(ss.FreeOnly, false)
|
||||
ss.PremiumOnly = helpers.DefaultPointer(ss.PremiumOnly, false)
|
||||
ss.StreamOnly = helpers.DefaultPointer(ss.StreamOnly, false)
|
||||
ss.MultiHopOnly = helpers.DefaultPointer(ss.MultiHopOnly, false)
|
||||
ss.OpenVPN.setDefaults(vpnProvider)
|
||||
ss.Wireguard.setDefaults()
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ func (s Shadowsocks) validate() (err error) {
|
||||
|
||||
func (s *Shadowsocks) copy() (copied Shadowsocks) {
|
||||
return Shadowsocks{
|
||||
Enabled: helpers.CopyBoolPtr(s.Enabled),
|
||||
Enabled: helpers.CopyPointer(s.Enabled),
|
||||
Settings: s.Settings.Copy(),
|
||||
}
|
||||
}
|
||||
@@ -29,7 +29,7 @@ func (s *Shadowsocks) copy() (copied Shadowsocks) {
|
||||
// mergeWith merges the other settings into any
|
||||
// unset field of the receiver settings object.
|
||||
func (s *Shadowsocks) mergeWith(other Shadowsocks) {
|
||||
s.Enabled = helpers.MergeWithBool(s.Enabled, other.Enabled)
|
||||
s.Enabled = helpers.MergeWithPointer(s.Enabled, other.Enabled)
|
||||
s.Settings.MergeWith(other.Settings)
|
||||
}
|
||||
|
||||
@@ -37,12 +37,12 @@ func (s *Shadowsocks) mergeWith(other Shadowsocks) {
|
||||
// settings object with any field set in the other
|
||||
// settings.
|
||||
func (s *Shadowsocks) overrideWith(other Shadowsocks) {
|
||||
s.Enabled = helpers.OverrideWithBool(s.Enabled, other.Enabled)
|
||||
s.Enabled = helpers.OverrideWithPointer(s.Enabled, other.Enabled)
|
||||
s.Settings.OverrideWith(other.Settings)
|
||||
}
|
||||
|
||||
func (s *Shadowsocks) setDefaults() {
|
||||
s.Enabled = helpers.DefaultBool(s.Enabled, false)
|
||||
s.Enabled = helpers.DefaultPointer(s.Enabled, false)
|
||||
s.Settings.SetDefaults()
|
||||
}
|
||||
|
||||
|
||||
@@ -19,28 +19,28 @@ func (s System) validate() (err error) {
|
||||
|
||||
func (s *System) copy() (copied System) {
|
||||
return System{
|
||||
PUID: helpers.CopyUint32Ptr(s.PUID),
|
||||
PGID: helpers.CopyUint32Ptr(s.PGID),
|
||||
PUID: helpers.CopyPointer(s.PUID),
|
||||
PGID: helpers.CopyPointer(s.PGID),
|
||||
Timezone: s.Timezone,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *System) mergeWith(other System) {
|
||||
s.PUID = helpers.MergeWithUint32(s.PUID, other.PUID)
|
||||
s.PGID = helpers.MergeWithUint32(s.PGID, other.PGID)
|
||||
s.PUID = helpers.MergeWithPointer(s.PUID, other.PUID)
|
||||
s.PGID = helpers.MergeWithPointer(s.PGID, other.PGID)
|
||||
s.Timezone = helpers.MergeWithString(s.Timezone, other.Timezone)
|
||||
}
|
||||
|
||||
func (s *System) overrideWith(other System) {
|
||||
s.PUID = helpers.OverrideWithUint32(s.PUID, other.PUID)
|
||||
s.PGID = helpers.OverrideWithUint32(s.PGID, other.PGID)
|
||||
s.PUID = helpers.OverrideWithPointer(s.PUID, other.PUID)
|
||||
s.PGID = helpers.OverrideWithPointer(s.PGID, other.PGID)
|
||||
s.Timezone = helpers.OverrideWithString(s.Timezone, other.Timezone)
|
||||
}
|
||||
|
||||
func (s *System) setDefaults() {
|
||||
const defaultID = 1000
|
||||
s.PUID = helpers.DefaultUint32(s.PUID, defaultID)
|
||||
s.PGID = helpers.DefaultUint32(s.PGID, defaultID)
|
||||
s.PUID = helpers.DefaultPointer(s.PUID, defaultID)
|
||||
s.PGID = helpers.DefaultPointer(s.PGID, defaultID)
|
||||
}
|
||||
|
||||
func (s System) String() string {
|
||||
|
||||
@@ -30,17 +30,17 @@ func (u *Unbound) setDefaults() {
|
||||
}
|
||||
}
|
||||
|
||||
u.Caching = helpers.DefaultBool(u.Caching, true)
|
||||
u.IPv6 = helpers.DefaultBool(u.IPv6, false)
|
||||
u.Caching = helpers.DefaultPointer(u.Caching, true)
|
||||
u.IPv6 = helpers.DefaultPointer(u.IPv6, false)
|
||||
|
||||
const defaultVerbosityLevel = 1
|
||||
u.VerbosityLevel = helpers.DefaultUint8(u.VerbosityLevel, defaultVerbosityLevel)
|
||||
u.VerbosityLevel = helpers.DefaultPointer(u.VerbosityLevel, defaultVerbosityLevel)
|
||||
|
||||
const defaultVerbosityDetailsLevel = 0
|
||||
u.VerbosityDetailsLevel = helpers.DefaultUint8(u.VerbosityDetailsLevel, defaultVerbosityDetailsLevel)
|
||||
u.VerbosityDetailsLevel = helpers.DefaultPointer(u.VerbosityDetailsLevel, defaultVerbosityDetailsLevel)
|
||||
|
||||
const defaultValidationLogLevel = 0
|
||||
u.ValidationLogLevel = helpers.DefaultUint8(u.ValidationLogLevel, defaultValidationLogLevel)
|
||||
u.ValidationLogLevel = helpers.DefaultPointer(u.ValidationLogLevel, defaultValidationLogLevel)
|
||||
|
||||
if u.Allowed == nil {
|
||||
u.Allowed = []netip.Prefix{
|
||||
@@ -94,37 +94,37 @@ func (u Unbound) validate() (err error) {
|
||||
|
||||
func (u Unbound) copy() (copied Unbound) {
|
||||
return Unbound{
|
||||
Providers: helpers.CopyStringSlice(u.Providers),
|
||||
Caching: helpers.CopyBoolPtr(u.Caching),
|
||||
IPv6: helpers.CopyBoolPtr(u.IPv6),
|
||||
VerbosityLevel: helpers.CopyUint8Ptr(u.VerbosityLevel),
|
||||
VerbosityDetailsLevel: helpers.CopyUint8Ptr(u.VerbosityDetailsLevel),
|
||||
ValidationLogLevel: helpers.CopyUint8Ptr(u.ValidationLogLevel),
|
||||
Providers: helpers.CopySlice(u.Providers),
|
||||
Caching: helpers.CopyPointer(u.Caching),
|
||||
IPv6: helpers.CopyPointer(u.IPv6),
|
||||
VerbosityLevel: helpers.CopyPointer(u.VerbosityLevel),
|
||||
VerbosityDetailsLevel: helpers.CopyPointer(u.VerbosityDetailsLevel),
|
||||
ValidationLogLevel: helpers.CopyPointer(u.ValidationLogLevel),
|
||||
Username: u.Username,
|
||||
Allowed: helpers.CopyNetipPrefixesSlice(u.Allowed),
|
||||
Allowed: helpers.CopySlice(u.Allowed),
|
||||
}
|
||||
}
|
||||
|
||||
func (u *Unbound) mergeWith(other Unbound) {
|
||||
u.Providers = helpers.MergeStringSlices(u.Providers, other.Providers)
|
||||
u.Caching = helpers.MergeWithBool(u.Caching, other.Caching)
|
||||
u.IPv6 = helpers.MergeWithBool(u.IPv6, other.IPv6)
|
||||
u.VerbosityLevel = helpers.MergeWithUint8(u.VerbosityLevel, other.VerbosityLevel)
|
||||
u.VerbosityDetailsLevel = helpers.MergeWithUint8(u.VerbosityDetailsLevel, other.VerbosityDetailsLevel)
|
||||
u.ValidationLogLevel = helpers.MergeWithUint8(u.ValidationLogLevel, other.ValidationLogLevel)
|
||||
u.Providers = helpers.MergeSlices(u.Providers, other.Providers)
|
||||
u.Caching = helpers.MergeWithPointer(u.Caching, other.Caching)
|
||||
u.IPv6 = helpers.MergeWithPointer(u.IPv6, other.IPv6)
|
||||
u.VerbosityLevel = helpers.MergeWithPointer(u.VerbosityLevel, other.VerbosityLevel)
|
||||
u.VerbosityDetailsLevel = helpers.MergeWithPointer(u.VerbosityDetailsLevel, other.VerbosityDetailsLevel)
|
||||
u.ValidationLogLevel = helpers.MergeWithPointer(u.ValidationLogLevel, other.ValidationLogLevel)
|
||||
u.Username = helpers.MergeWithString(u.Username, other.Username)
|
||||
u.Allowed = helpers.MergeNetipPrefixesSlices(u.Allowed, other.Allowed)
|
||||
u.Allowed = helpers.MergeSlices(u.Allowed, other.Allowed)
|
||||
}
|
||||
|
||||
func (u *Unbound) overrideWith(other Unbound) {
|
||||
u.Providers = helpers.OverrideWithStringSlice(u.Providers, other.Providers)
|
||||
u.Caching = helpers.OverrideWithBool(u.Caching, other.Caching)
|
||||
u.IPv6 = helpers.OverrideWithBool(u.IPv6, other.IPv6)
|
||||
u.VerbosityLevel = helpers.OverrideWithUint8(u.VerbosityLevel, other.VerbosityLevel)
|
||||
u.VerbosityDetailsLevel = helpers.OverrideWithUint8(u.VerbosityDetailsLevel, other.VerbosityDetailsLevel)
|
||||
u.ValidationLogLevel = helpers.OverrideWithUint8(u.ValidationLogLevel, other.ValidationLogLevel)
|
||||
u.Providers = helpers.OverrideWithSlice(u.Providers, other.Providers)
|
||||
u.Caching = helpers.OverrideWithPointer(u.Caching, other.Caching)
|
||||
u.IPv6 = helpers.OverrideWithPointer(u.IPv6, other.IPv6)
|
||||
u.VerbosityLevel = helpers.OverrideWithPointer(u.VerbosityLevel, other.VerbosityLevel)
|
||||
u.VerbosityDetailsLevel = helpers.OverrideWithPointer(u.VerbosityDetailsLevel, other.VerbosityDetailsLevel)
|
||||
u.ValidationLogLevel = helpers.OverrideWithPointer(u.ValidationLogLevel, other.ValidationLogLevel)
|
||||
u.Username = helpers.OverrideWithString(u.Username, other.Username)
|
||||
u.Allowed = helpers.OverrideWithNetipPrefixesSlice(u.Allowed, other.Allowed)
|
||||
u.Allowed = helpers.OverrideWithSlice(u.Allowed, other.Allowed)
|
||||
}
|
||||
|
||||
func (u Unbound) ToUnboundFormat() (settings unbound.Settings, err error) {
|
||||
|
||||
@@ -63,34 +63,34 @@ func (u Updater) Validate() (err error) {
|
||||
|
||||
func (u *Updater) copy() (copied Updater) {
|
||||
return Updater{
|
||||
Period: helpers.CopyDurationPtr(u.Period),
|
||||
Period: helpers.CopyPointer(u.Period),
|
||||
DNSAddress: u.DNSAddress,
|
||||
MinRatio: u.MinRatio,
|
||||
Providers: helpers.CopyStringSlice(u.Providers),
|
||||
Providers: helpers.CopySlice(u.Providers),
|
||||
}
|
||||
}
|
||||
|
||||
// mergeWith merges the other settings into any
|
||||
// unset field of the receiver settings object.
|
||||
func (u *Updater) mergeWith(other Updater) {
|
||||
u.Period = helpers.MergeWithDurationPtr(u.Period, other.Period)
|
||||
u.Period = helpers.MergeWithPointer(u.Period, other.Period)
|
||||
u.DNSAddress = helpers.MergeWithString(u.DNSAddress, other.DNSAddress)
|
||||
u.MinRatio = helpers.MergeWithFloat64(u.MinRatio, other.MinRatio)
|
||||
u.Providers = helpers.MergeStringSlices(u.Providers, other.Providers)
|
||||
u.MinRatio = helpers.MergeWithNumber(u.MinRatio, other.MinRatio)
|
||||
u.Providers = helpers.MergeSlices(u.Providers, other.Providers)
|
||||
}
|
||||
|
||||
// overrideWith overrides fields of the receiver
|
||||
// settings object with any field set in the other
|
||||
// settings.
|
||||
func (u *Updater) overrideWith(other Updater) {
|
||||
u.Period = helpers.OverrideWithDurationPtr(u.Period, other.Period)
|
||||
u.Period = helpers.OverrideWithPointer(u.Period, other.Period)
|
||||
u.DNSAddress = helpers.OverrideWithString(u.DNSAddress, other.DNSAddress)
|
||||
u.MinRatio = helpers.OverrideWithFloat64(u.MinRatio, other.MinRatio)
|
||||
u.Providers = helpers.OverrideWithStringSlice(u.Providers, other.Providers)
|
||||
u.MinRatio = helpers.OverrideWithNumber(u.MinRatio, other.MinRatio)
|
||||
u.Providers = helpers.OverrideWithSlice(u.Providers, other.Providers)
|
||||
}
|
||||
|
||||
func (u *Updater) SetDefaults(vpnProvider string) {
|
||||
u.Period = helpers.DefaultDurationPtr(u.Period, 0)
|
||||
u.Period = helpers.DefaultPointer(u.Period, 0)
|
||||
u.DNSAddress = helpers.DefaultString(u.DNSAddress, "1.1.1.1:53")
|
||||
|
||||
if u.MinRatio == 0 {
|
||||
|
||||
@@ -19,25 +19,25 @@ func (v Version) validate() (err error) {
|
||||
|
||||
func (v *Version) copy() (copied Version) {
|
||||
return Version{
|
||||
Enabled: helpers.CopyBoolPtr(v.Enabled),
|
||||
Enabled: helpers.CopyPointer(v.Enabled),
|
||||
}
|
||||
}
|
||||
|
||||
// mergeWith merges the other settings into any
|
||||
// unset field of the receiver settings object.
|
||||
func (v *Version) mergeWith(other Version) {
|
||||
v.Enabled = helpers.MergeWithBool(v.Enabled, other.Enabled)
|
||||
v.Enabled = helpers.MergeWithPointer(v.Enabled, other.Enabled)
|
||||
}
|
||||
|
||||
// overrideWith overrides fields of the receiver
|
||||
// settings object with any field set in the other
|
||||
// settings.
|
||||
func (v *Version) overrideWith(other Version) {
|
||||
v.Enabled = helpers.OverrideWithBool(v.Enabled, other.Enabled)
|
||||
v.Enabled = helpers.OverrideWithPointer(v.Enabled, other.Enabled)
|
||||
}
|
||||
|
||||
func (v *Version) setDefaults() {
|
||||
v.Enabled = helpers.DefaultBool(v.Enabled, true)
|
||||
v.Enabled = helpers.DefaultPointer(v.Enabled, true)
|
||||
}
|
||||
|
||||
func (v Version) String() string {
|
||||
|
||||
@@ -106,33 +106,33 @@ func (w Wireguard) validate(vpnProvider string, ipv6Supported bool) (err error)
|
||||
|
||||
func (w *Wireguard) copy() (copied Wireguard) {
|
||||
return Wireguard{
|
||||
PrivateKey: helpers.CopyStringPtr(w.PrivateKey),
|
||||
PreSharedKey: helpers.CopyStringPtr(w.PreSharedKey),
|
||||
Addresses: helpers.CopyNetipPrefixesSlice(w.Addresses),
|
||||
PrivateKey: helpers.CopyPointer(w.PrivateKey),
|
||||
PreSharedKey: helpers.CopyPointer(w.PreSharedKey),
|
||||
Addresses: helpers.CopySlice(w.Addresses),
|
||||
Interface: w.Interface,
|
||||
Implementation: w.Implementation,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *Wireguard) mergeWith(other Wireguard) {
|
||||
w.PrivateKey = helpers.MergeWithStringPtr(w.PrivateKey, other.PrivateKey)
|
||||
w.PreSharedKey = helpers.MergeWithStringPtr(w.PreSharedKey, other.PreSharedKey)
|
||||
w.Addresses = helpers.MergeNetipPrefixesSlices(w.Addresses, other.Addresses)
|
||||
w.PrivateKey = helpers.MergeWithPointer(w.PrivateKey, other.PrivateKey)
|
||||
w.PreSharedKey = helpers.MergeWithPointer(w.PreSharedKey, other.PreSharedKey)
|
||||
w.Addresses = helpers.MergeSlices(w.Addresses, other.Addresses)
|
||||
w.Interface = helpers.MergeWithString(w.Interface, other.Interface)
|
||||
w.Implementation = helpers.MergeWithString(w.Implementation, other.Implementation)
|
||||
}
|
||||
|
||||
func (w *Wireguard) overrideWith(other Wireguard) {
|
||||
w.PrivateKey = helpers.OverrideWithStringPtr(w.PrivateKey, other.PrivateKey)
|
||||
w.PreSharedKey = helpers.OverrideWithStringPtr(w.PreSharedKey, other.PreSharedKey)
|
||||
w.Addresses = helpers.OverrideWithNetipPrefixesSlice(w.Addresses, other.Addresses)
|
||||
w.PrivateKey = helpers.OverrideWithPointer(w.PrivateKey, other.PrivateKey)
|
||||
w.PreSharedKey = helpers.OverrideWithPointer(w.PreSharedKey, other.PreSharedKey)
|
||||
w.Addresses = helpers.OverrideWithSlice(w.Addresses, other.Addresses)
|
||||
w.Interface = helpers.OverrideWithString(w.Interface, other.Interface)
|
||||
w.Implementation = helpers.OverrideWithString(w.Implementation, other.Implementation)
|
||||
}
|
||||
|
||||
func (w *Wireguard) setDefaults() {
|
||||
w.PrivateKey = helpers.DefaultStringPtr(w.PrivateKey, "")
|
||||
w.PreSharedKey = helpers.DefaultStringPtr(w.PreSharedKey, "")
|
||||
w.PrivateKey = helpers.DefaultPointer(w.PrivateKey, "")
|
||||
w.PreSharedKey = helpers.DefaultPointer(w.PreSharedKey, "")
|
||||
w.Interface = helpers.DefaultString(w.Interface, "wg0")
|
||||
w.Implementation = helpers.DefaultString(w.Implementation, "auto")
|
||||
}
|
||||
|
||||
@@ -110,26 +110,26 @@ func (w WireguardSelection) validate(vpnProvider string) (err error) {
|
||||
func (w *WireguardSelection) copy() (copied WireguardSelection) {
|
||||
return WireguardSelection{
|
||||
EndpointIP: w.EndpointIP,
|
||||
EndpointPort: helpers.CopyUint16Ptr(w.EndpointPort),
|
||||
EndpointPort: helpers.CopyPointer(w.EndpointPort),
|
||||
PublicKey: w.PublicKey,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *WireguardSelection) mergeWith(other WireguardSelection) {
|
||||
w.EndpointIP = helpers.MergeWithIP(w.EndpointIP, other.EndpointIP)
|
||||
w.EndpointPort = helpers.MergeWithUint16(w.EndpointPort, other.EndpointPort)
|
||||
w.EndpointPort = helpers.MergeWithPointer(w.EndpointPort, other.EndpointPort)
|
||||
w.PublicKey = helpers.MergeWithString(w.PublicKey, other.PublicKey)
|
||||
}
|
||||
|
||||
func (w *WireguardSelection) overrideWith(other WireguardSelection) {
|
||||
w.EndpointIP = helpers.OverrideWithIP(w.EndpointIP, other.EndpointIP)
|
||||
w.EndpointPort = helpers.OverrideWithUint16(w.EndpointPort, other.EndpointPort)
|
||||
w.EndpointPort = helpers.OverrideWithPointer(w.EndpointPort, other.EndpointPort)
|
||||
w.PublicKey = helpers.OverrideWithString(w.PublicKey, other.PublicKey)
|
||||
}
|
||||
|
||||
func (w *WireguardSelection) setDefaults() {
|
||||
w.EndpointIP = helpers.DefaultIP(w.EndpointIP, netip.IPv4Unspecified())
|
||||
w.EndpointPort = helpers.DefaultUint16(w.EndpointPort, 0)
|
||||
w.EndpointPort = helpers.DefaultPointer(w.EndpointPort, 0)
|
||||
}
|
||||
|
||||
func (w WireguardSelection) String() string {
|
||||
|
||||
@@ -36,10 +36,10 @@ type Settings struct {
|
||||
func (s *Settings) SetDefaults() {
|
||||
s.Address = helpers.DefaultString(s.Address, ":8000")
|
||||
const defaultReadTimeout = 3 * time.Second
|
||||
s.ReadHeaderTimeout = helpers.DefaultDuration(s.ReadHeaderTimeout, defaultReadTimeout)
|
||||
s.ReadTimeout = helpers.DefaultDuration(s.ReadTimeout, defaultReadTimeout)
|
||||
s.ReadHeaderTimeout = helpers.DefaultNumber(s.ReadHeaderTimeout, defaultReadTimeout)
|
||||
s.ReadTimeout = helpers.DefaultNumber(s.ReadTimeout, defaultReadTimeout)
|
||||
const defaultShutdownTimeout = 3 * time.Second
|
||||
s.ShutdownTimeout = helpers.DefaultDuration(s.ShutdownTimeout, defaultShutdownTimeout)
|
||||
s.ShutdownTimeout = helpers.DefaultNumber(s.ShutdownTimeout, defaultShutdownTimeout)
|
||||
}
|
||||
|
||||
func (s Settings) Copy() Settings {
|
||||
@@ -59,9 +59,9 @@ func (s *Settings) MergeWith(other Settings) {
|
||||
if s.Logger == nil {
|
||||
s.Logger = other.Logger
|
||||
}
|
||||
s.ReadHeaderTimeout = helpers.MergeWithDuration(s.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
s.ReadTimeout = helpers.MergeWithDuration(s.ReadTimeout, other.ReadTimeout)
|
||||
s.ShutdownTimeout = helpers.MergeWithDuration(s.ShutdownTimeout, other.ShutdownTimeout)
|
||||
s.ReadHeaderTimeout = helpers.MergeWithNumber(s.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
s.ReadTimeout = helpers.MergeWithNumber(s.ReadTimeout, other.ReadTimeout)
|
||||
s.ShutdownTimeout = helpers.MergeWithNumber(s.ShutdownTimeout, other.ShutdownTimeout)
|
||||
}
|
||||
|
||||
func (s *Settings) OverrideWith(other Settings) {
|
||||
@@ -70,9 +70,9 @@ func (s *Settings) OverrideWith(other Settings) {
|
||||
if other.Logger != nil {
|
||||
s.Logger = other.Logger
|
||||
}
|
||||
s.ReadHeaderTimeout = helpers.OverrideWithDuration(s.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
s.ReadTimeout = helpers.OverrideWithDuration(s.ReadTimeout, other.ReadTimeout)
|
||||
s.ShutdownTimeout = helpers.OverrideWithDuration(s.ShutdownTimeout, other.ShutdownTimeout)
|
||||
s.ReadHeaderTimeout = helpers.OverrideWithNumber(s.ReadHeaderTimeout, other.ReadHeaderTimeout)
|
||||
s.ReadTimeout = helpers.OverrideWithNumber(s.ReadTimeout, other.ReadTimeout)
|
||||
s.ShutdownTimeout = helpers.OverrideWithNumber(s.ShutdownTimeout, other.ShutdownTimeout)
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
@@ -27,16 +27,16 @@ type Settings struct {
|
||||
}
|
||||
|
||||
func (s *Settings) SetDefaults() {
|
||||
s.Enabled = helpers.DefaultBool(s.Enabled, false)
|
||||
s.Enabled = helpers.DefaultPointer(s.Enabled, false)
|
||||
s.HTTPServer.Address = helpers.DefaultString(s.HTTPServer.Address, "localhost:6060")
|
||||
const defaultReadTimeout = 5 * time.Minute // for CPU profiling
|
||||
s.HTTPServer.ReadTimeout = helpers.DefaultDuration(s.HTTPServer.ReadTimeout, defaultReadTimeout)
|
||||
s.HTTPServer.ReadTimeout = helpers.DefaultNumber(s.HTTPServer.ReadTimeout, defaultReadTimeout)
|
||||
s.HTTPServer.SetDefaults()
|
||||
}
|
||||
|
||||
func (s Settings) Copy() (copied Settings) {
|
||||
return Settings{
|
||||
Enabled: helpers.CopyBoolPtr(s.Enabled),
|
||||
Enabled: helpers.CopyPointer(s.Enabled),
|
||||
BlockProfileRate: s.BlockProfileRate,
|
||||
MutexProfileRate: s.MutexProfileRate,
|
||||
HTTPServer: s.HTTPServer.Copy(),
|
||||
@@ -44,16 +44,16 @@ func (s Settings) Copy() (copied Settings) {
|
||||
}
|
||||
|
||||
func (s *Settings) MergeWith(other Settings) {
|
||||
s.Enabled = helpers.MergeWithBool(s.Enabled, other.Enabled)
|
||||
s.BlockProfileRate = helpers.MergeWithIntPtr(s.BlockProfileRate, other.BlockProfileRate)
|
||||
s.MutexProfileRate = helpers.MergeWithIntPtr(s.MutexProfileRate, other.MutexProfileRate)
|
||||
s.Enabled = helpers.MergeWithPointer(s.Enabled, other.Enabled)
|
||||
s.BlockProfileRate = helpers.MergeWithPointer(s.BlockProfileRate, other.BlockProfileRate)
|
||||
s.MutexProfileRate = helpers.MergeWithPointer(s.MutexProfileRate, other.MutexProfileRate)
|
||||
s.HTTPServer.MergeWith(other.HTTPServer)
|
||||
}
|
||||
|
||||
func (s *Settings) OverrideWith(other Settings) {
|
||||
s.Enabled = helpers.OverrideWithBool(s.Enabled, other.Enabled)
|
||||
s.BlockProfileRate = helpers.OverrideWithIntPtr(s.BlockProfileRate, other.BlockProfileRate)
|
||||
s.MutexProfileRate = helpers.OverrideWithIntPtr(s.MutexProfileRate, other.MutexProfileRate)
|
||||
s.Enabled = helpers.OverrideWithPointer(s.Enabled, other.Enabled)
|
||||
s.BlockProfileRate = helpers.OverrideWithPointer(s.BlockProfileRate, other.BlockProfileRate)
|
||||
s.MutexProfileRate = helpers.OverrideWithPointer(s.MutexProfileRate, other.MutexProfileRate)
|
||||
s.HTTPServer.OverrideWith(other.HTTPServer)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/configuration/settings"
|
||||
@@ -68,7 +69,7 @@ func filterServer(server models.Server,
|
||||
return true
|
||||
}
|
||||
|
||||
if filterByPossibilitiesUint16(server.Number, selection.Numbers) {
|
||||
if filterByPossibilities(server.Number, selection.Numbers) {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -85,25 +86,12 @@ func filterServer(server models.Server,
|
||||
return false
|
||||
}
|
||||
|
||||
func filterByPossibilities(value string, possibilities []string) (filtered bool) {
|
||||
func filterByPossibilities[T string | uint16](value T, possibilities []T) (filtered bool) {
|
||||
if len(possibilities) == 0 {
|
||||
return false
|
||||
}
|
||||
for _, possibility := range possibilities {
|
||||
if strings.EqualFold(value, possibility) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// TODO merge with filterByPossibilities with generics in Go 1.18.
|
||||
func filterByPossibilitiesUint16(value uint16, possibilities []uint16) (filtered bool) {
|
||||
if len(possibilities) == 0 {
|
||||
return false
|
||||
}
|
||||
for _, possibility := range possibilities {
|
||||
if value == possibility {
|
||||
if strings.EqualFold(fmt.Sprint(value), fmt.Sprint(possibility)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/configuration/settings"
|
||||
@@ -89,7 +90,7 @@ func filterServer(server models.Server,
|
||||
return true
|
||||
}
|
||||
|
||||
if filterByPossibilitiesUint16(server.Number, selection.Numbers) {
|
||||
if filterByPossibilities(server.Number, selection.Numbers) {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -106,25 +107,12 @@ func filterServer(server models.Server,
|
||||
return false
|
||||
}
|
||||
|
||||
func filterByPossibilities(value string, possibilities []string) (filtered bool) {
|
||||
func filterByPossibilities[T string | uint16](value T, possibilities []T) (filtered bool) {
|
||||
if len(possibilities) == 0 {
|
||||
return false
|
||||
}
|
||||
for _, possibility := range possibilities {
|
||||
if strings.EqualFold(value, possibility) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// TODO merge with filterByPossibilities with generics in Go 1.18.
|
||||
func filterByPossibilitiesUint16(value uint16, possibilities []uint16) (filtered bool) {
|
||||
if len(possibilities) == 0 {
|
||||
return false
|
||||
}
|
||||
for _, possibility := range possibilities {
|
||||
if value == possibility {
|
||||
if strings.EqualFold(fmt.Sprint(value), fmt.Sprint(possibility)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user