3 changed files with 76 additions and 61 deletions
			
			
		@ -0,0 +1,76 @@
					 | 
				
			||||
package zones | 
				
			||||
 | 
				
			||||
import ( | 
				
			||||
	"io/fs" | 
				
			||||
	"os" | 
				
			||||
) | 
				
			||||
 | 
				
			||||
var ( | 
				
			||||
	_ WireguardKeysWriter = (*Zones)(nil) | 
				
			||||
	_ WireguardKeysWriter = (*Zone)(nil) | 
				
			||||
	_ WireguardKeysWriter = (*Machine)(nil) | 
				
			||||
) | 
				
			||||
 | 
				
			||||
// A WireguardKeysWriter writes the Wireguard Keys for all machines
 | 
				
			||||
// under its scope for the specified ring
 | 
				
			||||
type WireguardKeysWriter interface { | 
				
			||||
	WriteWireguardKeys(ring int) error | 
				
			||||
} | 
				
			||||
 | 
				
			||||
// WriteWireguardKeys rewrites all wgN.{key,pub} files
 | 
				
			||||
func (m *Zones) WriteWireguardKeys(ring int) error { | 
				
			||||
	return writeWireguardKeys(m, ring) | 
				
			||||
} | 
				
			||||
 | 
				
			||||
// WriteWireguardKeys rewrites all wgN.{key,pub} files on this zone
 | 
				
			||||
func (z *Zone) WriteWireguardKeys(ring int) error { | 
				
			||||
	return writeWireguardKeys(z, ring) | 
				
			||||
} | 
				
			||||
 | 
				
			||||
func writeWireguardKeys(m MachineIterator, ring int) error { | 
				
			||||
	var err error | 
				
			||||
 | 
				
			||||
	m.ForEachMachine(func(p *Machine) bool { | 
				
			||||
		err = p.WriteWireguardKeys(ring) | 
				
			||||
		if os.IsNotExist(err) { | 
				
			||||
			// ignore
 | 
				
			||||
			err = nil | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		return err != nil | 
				
			||||
	}) | 
				
			||||
 | 
				
			||||
	return err | 
				
			||||
} | 
				
			||||
 | 
				
			||||
// WriteWireguardKeys writes the wgN.key/wgN.pub files
 | 
				
			||||
func (m *Machine) WriteWireguardKeys(ring int) error { | 
				
			||||
	var err error | 
				
			||||
	var key, pub string | 
				
			||||
	var ri *RingInfo | 
				
			||||
 | 
				
			||||
	ri, _ = m.getRingInfo(ring) | 
				
			||||
	if ri != nil { | 
				
			||||
		key = ri.Keys.PrivateKey.String() | 
				
			||||
		pub = ri.Keys.PublicKey.String() | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	switch { | 
				
			||||
	case key == "": | 
				
			||||
		return fs.ErrNotExist | 
				
			||||
	case pub == "": | 
				
			||||
		pub = ri.Keys.PrivateKey.Public().String() | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	err = m.WriteStringFile(key+"\n", "wg%v.key", ring) | 
				
			||||
	if err != nil { | 
				
			||||
		return err | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	err = m.WriteStringFile(pub+"\n", "wg%v.pub", ring) | 
				
			||||
	if err != nil { | 
				
			||||
		return err | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	return nil | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue