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