74 lines
2.0 KiB
Go
74 lines
2.0 KiB
Go
|
|
package configuration
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"net"
|
||
|
|
"strings"
|
||
|
|
|
||
|
|
"github.com/qdm12/golibs/params"
|
||
|
|
)
|
||
|
|
|
||
|
|
// 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"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func (settings *Wireguard) String() string {
|
||
|
|
return strings.Join(settings.lines(), "\n")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (settings *Wireguard) lines() (lines []string) {
|
||
|
|
lines = append(lines, lastIndent+"Wireguard:")
|
||
|
|
|
||
|
|
lines = append(lines, indent+lastIndent+"Network interface: "+settings.Interface)
|
||
|
|
|
||
|
|
if settings.PrivateKey != "" {
|
||
|
|
lines = append(lines, indent+lastIndent+"Private key is set")
|
||
|
|
}
|
||
|
|
|
||
|
|
if settings.PreSharedKey != "" {
|
||
|
|
lines = append(lines, indent+lastIndent+"Pre-shared key is set")
|
||
|
|
}
|
||
|
|
|
||
|
|
if settings.Address != nil {
|
||
|
|
lines = append(lines, indent+lastIndent+"Address: "+settings.Address.String())
|
||
|
|
}
|
||
|
|
|
||
|
|
return lines
|
||
|
|
}
|
||
|
|
|
||
|
|
func (settings *Wireguard) read(r reader) (err error) {
|
||
|
|
settings.PrivateKey, err = r.env.Get("WIREGUARD_PRIVATE_KEY",
|
||
|
|
params.CaseSensitiveValue(), params.Unset(), params.Compulsory())
|
||
|
|
if err != nil {
|
||
|
|
return fmt.Errorf("environment variable WIREGUARD_PRIVATE_KEY: %w", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
settings.PreSharedKey, err = r.env.Get("WIREGUARD_PRESHARED_KEY",
|
||
|
|
params.CaseSensitiveValue(), params.Unset())
|
||
|
|
if err != nil {
|
||
|
|
return fmt.Errorf("environment variable WIREGUARD_PRESHARED_KEY: %w", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
addressString, err := r.env.Get("WIREGUARD_ADDRESS", params.Compulsory())
|
||
|
|
if err != nil {
|
||
|
|
return fmt.Errorf("environment variable WIREGUARD_ADDRESS: %w", 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 {
|
||
|
|
return fmt.Errorf("environment variable WIREGUARD_INTERFACE: %w", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|