zones: introduce Machine.GetWireguardKeys()
Signed-off-by: Alejandro Mery <amery@jpi.io>
This commit is contained in:
@@ -10,6 +10,57 @@ import (
|
|||||||
"git.jpi.io/amery/jpictl/pkg/wireguard"
|
"git.jpi.io/amery/jpictl/pkg/wireguard"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// GetWireguardKeys reads a wgN.key/wgN.pub files
|
||||||
|
func (m *Machine) GetWireguardKeys(ring int) (*wireguard.KeyPair, error) {
|
||||||
|
var (
|
||||||
|
data []byte
|
||||||
|
err error
|
||||||
|
key wireguard.PrivateKey
|
||||||
|
pub wireguard.PublicKey
|
||||||
|
)
|
||||||
|
|
||||||
|
data, err = m.ReadFile("wg%v.key", ring)
|
||||||
|
if err != nil {
|
||||||
|
// failed to read
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, err = wireguard.PrivateKeyFromBase64(string(data))
|
||||||
|
if err != nil {
|
||||||
|
// bad key
|
||||||
|
err = core.Wrapf(err, "wg%v.key", ring)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err = m.ReadFile("wg%v.pub", ring)
|
||||||
|
switch {
|
||||||
|
case os.IsNotExist(err):
|
||||||
|
// no wgN.pub is fine
|
||||||
|
case err != nil:
|
||||||
|
// failed to read
|
||||||
|
return nil, err
|
||||||
|
default:
|
||||||
|
// good read
|
||||||
|
pub, err = wireguard.PublicKeyFromBase64(string(data))
|
||||||
|
if err != nil {
|
||||||
|
// bad key
|
||||||
|
err = core.Wrapf(err, "wg%v.pub", ring)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
kp := &wireguard.KeyPair{
|
||||||
|
PrivateKey: key,
|
||||||
|
PublicKey: pub,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = kp.Validate(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return kp, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetWireguardConfig reads a wgN.conf file
|
// GetWireguardConfig reads a wgN.conf file
|
||||||
func (m *Machine) GetWireguardConfig(ring int) (*wireguard.Config, error) {
|
func (m *Machine) GetWireguardConfig(ring int) (*wireguard.Config, error) {
|
||||||
data, err := m.ReadFile("wg%v.conf", ring)
|
data, err := m.ReadFile("wg%v.conf", ring)
|
||||||
|
|||||||
Reference in New Issue
Block a user