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