Compare commits

...

2 Commits

Author SHA1 Message Date
amery c92873f07d zones: introduce RingInfo and Machine.Rings
RingInfo includes Wireguard ring related details

Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-22 17:11:19 +00:00
amery 4d25ea1d16 wireguard: introduce initial BinaryKey and KeyPair structs
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-22 17:11:18 +00:00
3 changed files with 47 additions and 3 deletions
+30
View File
@@ -0,0 +1,30 @@
package wireguard
import (
"encoding/base64"
)
// BinaryKey is a binary blob
type BinaryKey []byte
func (k BinaryKey) String() string {
return base64.StdEncoding.EncodeToString(k)
}
// IsZero tells if the key hasn't been set
func (k BinaryKey) IsZero() bool {
return len(k) == 0
}
// BinaryKeyFromBase64 decodes a base64-based string into
// a [BinaryKey]
func BinaryKeyFromBase64(data string) (BinaryKey, error) {
b, err := base64.StdEncoding.DecodeString(data)
return BinaryKey(b), err
}
// KeyPair holds a Key pair
type KeyPair struct {
PrivateKey BinaryKey
PublicKey BinaryKey
}
+3 -2
View File
@@ -16,9 +16,10 @@ type Machine struct {
zone *Zone
id int
Name string
Name string `toml:"name"`
PublicAddresses []netip.Addr
PublicAddresses []netip.Addr `toml:"public,omitempty"`
RingAddresses []*RingInfo `toml:"rings,omitempty"`
}
func (m *Machine) String() string {
+14 -1
View File
@@ -1,6 +1,10 @@
package zones
import "net/netip"
import (
"net/netip"
"git.jpi.io/amery/jpictl/pkg/wireguard"
)
const (
// MaxZoneID indicates the highest ID allowed for a Zone
@@ -11,6 +15,15 @@ const (
RingsCount = 2
)
// 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"`
Address netip.Addr `toml:"address,omitempty"`
}
// RingAddressEncoder provides encoder/decoder access for a particular
// Wireguard ring
type RingAddressEncoder struct {