wireguard: make KeyPairs solid
Signed-off-by: Alejandro Mery <amery@jpi.io>
This commit is contained in:
+12
-18
@@ -23,14 +23,16 @@ const (
|
||||
// RingInfo contains represents the Wireguard endpoint details
|
||||
// for a Machine on a particular ring
|
||||
type RingInfo struct {
|
||||
Ring int `toml:"ring"`
|
||||
Enabled bool `toml:"enabled,omitempty"`
|
||||
Keys *wireguard.KeyPair `toml:"keys,omitempty"`
|
||||
Ring int `toml:"ring"`
|
||||
Enabled bool `toml:"enabled,omitempty"`
|
||||
Keys wireguard.KeyPair `toml:"keys,omitempty"`
|
||||
}
|
||||
|
||||
// Merge attempts to combine two RingInfo structs
|
||||
func (ri *RingInfo) Merge(alter *RingInfo) error {
|
||||
switch {
|
||||
case alter == nil:
|
||||
return nil
|
||||
case ri.Ring != alter.Ring:
|
||||
// different ring
|
||||
return fmt.Errorf("invalid %s: %v ≠ %v", "ring", ri.Ring, alter.Ring)
|
||||
@@ -51,27 +53,19 @@ func (ri *RingInfo) unsafeMerge(alter *RingInfo) error {
|
||||
ri.Enabled = true
|
||||
}
|
||||
|
||||
switch {
|
||||
case ri.Keys == nil:
|
||||
// assign keypair
|
||||
ri.Keys = alter.Keys
|
||||
case alter.Keys != nil:
|
||||
// fill the gaps on our keypair
|
||||
if ri.Keys.PrivateKey.IsZero() {
|
||||
ri.Keys.PrivateKey = alter.Keys.PrivateKey
|
||||
}
|
||||
if ri.Keys.PublicKey.IsZero() {
|
||||
ri.Keys.PublicKey = alter.Keys.PublicKey
|
||||
}
|
||||
// fill the gaps on our keypair
|
||||
if ri.Keys.PrivateKey.IsZero() {
|
||||
ri.Keys.PrivateKey = alter.Keys.PrivateKey
|
||||
}
|
||||
if ri.Keys.PublicKey.IsZero() {
|
||||
ri.Keys.PublicKey = alter.Keys.PublicKey
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func canMergeKeyPairs(p1, p2 *wireguard.KeyPair) bool {
|
||||
func canMergeKeyPairs(p1, p2 wireguard.KeyPair) bool {
|
||||
switch {
|
||||
case p1 == nil || p2 == nil:
|
||||
return true
|
||||
case !p1.PrivateKey.IsZero() && !p2.PrivateKey.IsZero() && !p1.PrivateKey.Equal(p2.PrivateKey):
|
||||
return false
|
||||
case !p1.PublicKey.IsZero() && !p2.PublicKey.IsZero() && !p1.PublicKey.Equal(p2.PublicKey):
|
||||
|
||||
Reference in New Issue
Block a user