Feat: support csv addresses in WIREGUARD_ADDRESS
This commit is contained in:
@@ -10,10 +10,10 @@ import (
|
||||
|
||||
// Wireguard contains settings to configure the Wireguard client.
|
||||
type Wireguard struct {
|
||||
PrivateKey string `json:"privatekey"`
|
||||
PreSharedKey string `json:"presharedkey"`
|
||||
Address *net.IPNet `json:"address"`
|
||||
Interface string `json:"interface"`
|
||||
PrivateKey string `json:"privatekey"`
|
||||
PreSharedKey string `json:"presharedkey"`
|
||||
Addresses []*net.IPNet `json:"addresses"`
|
||||
Interface string `json:"interface"`
|
||||
}
|
||||
|
||||
func (settings *Wireguard) String() string {
|
||||
@@ -33,8 +33,11 @@ func (settings *Wireguard) lines() (lines []string) {
|
||||
lines = append(lines, indent+lastIndent+"Pre-shared key is set")
|
||||
}
|
||||
|
||||
if settings.Address != nil {
|
||||
lines = append(lines, indent+lastIndent+"Address: "+settings.Address.String())
|
||||
if len(settings.Addresses) > 0 {
|
||||
lines = append(lines, indent+lastIndent+"Addresses: ")
|
||||
for _, address := range settings.Addresses {
|
||||
lines = append(lines, indent+indent+lastIndent+address.String())
|
||||
}
|
||||
}
|
||||
|
||||
return lines
|
||||
@@ -53,16 +56,10 @@ func (settings *Wireguard) read(r reader) (err error) {
|
||||
return fmt.Errorf("environment variable WIREGUARD_PRESHARED_KEY: %w", err)
|
||||
}
|
||||
|
||||
addressString, err := r.env.Get("WIREGUARD_ADDRESS", params.Compulsory())
|
||||
err = settings.readAddresses(r.env)
|
||||
if err != nil {
|
||||
return fmt.Errorf("environment variable WIREGUARD_ADDRESS: %w", err)
|
||||
return err
|
||||
}
|
||||
ip, ipNet, err := net.ParseCIDR(addressString)
|
||||
if err != nil {
|
||||
return fmt.Errorf("environment variable WIREGUARD_ADDRESS: %w", err)
|
||||
}
|
||||
ipNet.IP = ip
|
||||
settings.Address = ipNet
|
||||
|
||||
settings.Interface, err = r.env.Get("WIREGUARD_INTERFACE", params.Default("wg0"))
|
||||
if err != nil {
|
||||
@@ -71,3 +68,21 @@ func (settings *Wireguard) read(r reader) (err error) {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (settings *Wireguard) readAddresses(env params.Interface) (err error) {
|
||||
addressStrings, err := env.CSV("WIREGUARD_ADDRESS", params.Compulsory())
|
||||
if err != nil {
|
||||
return fmt.Errorf("environment variable WIREGUARD_ADDRESS: %w", err)
|
||||
}
|
||||
|
||||
for _, addressString := range addressStrings {
|
||||
ip, ipNet, err := net.ParseCIDR(addressString)
|
||||
if err != nil {
|
||||
return fmt.Errorf("environment variable WIREGUARD_ADDRESS: address %s: %w", addressString, err)
|
||||
}
|
||||
ipNet.IP = ip
|
||||
settings.Addresses = append(settings.Addresses, ipNet)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -23,12 +23,14 @@ func BuildWireguardSettings(connection models.Connection,
|
||||
copy(settings.Endpoint.IP, connection.IP)
|
||||
settings.Endpoint.Port = int(connection.Port)
|
||||
|
||||
address := new(net.IPNet)
|
||||
address.IP = make(net.IP, len(userSettings.Address.IP))
|
||||
copy(address.IP, userSettings.Address.IP)
|
||||
address.Mask = make(net.IPMask, len(userSettings.Address.Mask))
|
||||
copy(address.Mask, userSettings.Address.Mask)
|
||||
settings.Addresses = append(settings.Addresses, address)
|
||||
for _, address := range settings.Addresses {
|
||||
addressCopy := new(net.IPNet)
|
||||
addressCopy.IP = make(net.IP, len(address.IP))
|
||||
copy(addressCopy.IP, address.IP)
|
||||
addressCopy.Mask = make(net.IPMask, len(address.Mask))
|
||||
copy(addressCopy.Mask, address.Mask)
|
||||
settings.Addresses = append(settings.Addresses, addressCopy)
|
||||
}
|
||||
|
||||
return settings
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user