| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | package ncutilsimport (	"embed"	"fmt"	"log"	"os"	"os/exec"	"strconv"	"strings"	"syscall"	"github.com/gravitl/netmaker/models"	"golang.zx2c4.com/wireguard/wgctrl/wgtypes")//go:embed windowsdaemon/winsw.exevar winswContent embed.FS// RunCmd - runs a local commandfunc RunCmd(command string, printerr bool) (string, error) {	args := strings.Fields(command)	cmd := exec.Command(args[0], args[1:]...)	cmd.Wait()	//cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/C \"" + command + "\""}	out, err := cmd.CombinedOutput()	if err != nil && printerr {		log.Println("error running command:", command)		log.Println(strings.TrimSuffix(string(out), "\n"))	}	return string(out), err}// RunCmd - runs a local commandfunc RunCmdFormatted(command string, printerr bool) (string, error) {	var comSpec = os.Getenv("COMSPEC")	if comSpec == "" {		comSpec = os.Getenv("SystemRoot") + "\\System32\\cmd.exe"	}	cmd := exec.Command(comSpec)	cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/C \"" + command + "\""}	cmd.Wait()	out, err := cmd.CombinedOutput()	if err != nil && printerr {		log.Println("error running command:", command)		log.Println(strings.TrimSuffix(string(out), "\n"))	}	return string(out), err}// CreateWireGuardConf - creates a WireGuard conf stringfunc CreateWireGuardConf(node *models.Node, privatekey string, listenPort string, peers []wgtypes.PeerConfig) (string, error) {	peersString, err := parsePeers(node.PersistentKeepalive, peers)	var listenPortString string	if node.MTU <= 0 {		node.MTU = 1280	}	if listenPort != "" {		listenPortString += "ListenPort = " + listenPort	}	if err != nil {		return "", err	}	config := fmt.Sprintf(`[Interface]Address = %sPrivateKey = %sMTU = %s%s%s`,		node.Address+"/32",		privatekey,		strconv.Itoa(int(node.MTU)),		listenPortString,		peersString)	return config, nil}// GetEmbedded - Gets the Windows daemon creatorfunc GetEmbedded() error {	data, err := winswContent.ReadFile("windowsdaemon/winsw.exe")	if err != nil {		return err	}	fileName := fmt.Sprintf("%swinsw.exe", GetNetclientPathSpecific())	err = os.WriteFile(fileName, data, 0700)	if err != nil {		Log("could not mount winsw.exe")		return err	}	return nil}
 |