Initial commit
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
wgGen
 | 
			
		||||
wgGen.exe
 | 
			
		||||
							
								
								
									
										5
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
module wgGen
 | 
			
		||||
 | 
			
		||||
go 1.21.6
 | 
			
		||||
 | 
			
		||||
require github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e // indirect
 | 
			
		||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e h1:wSQCJiig/QkoUnpvelSPbLiZNWvh2yMqQTQvIQqSUkU=
 | 
			
		||||
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e/go.mod h1:5G2EjwzgZUPnnReoKvPWVneT8APYbyKkihDVAHUi0II=
 | 
			
		||||
							
								
								
									
										225
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										225
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,225 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/andlabs/ui"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const ConfigBody = `[NetDev]
 | 
			
		||||
Name=%s
 | 
			
		||||
Kind=wireguard
 | 
			
		||||
Description=%s
 | 
			
		||||
 | 
			
		||||
[WireGuard]
 | 
			
		||||
ListenPort=12345
 | 
			
		||||
PrivateKey=%s
 | 
			
		||||
 | 
			
		||||
`
 | 
			
		||||
const ConfigPeer = `[WireGuardPeer]
 | 
			
		||||
PublicKey=%s
 | 
			
		||||
PresharedKey=%s
 | 
			
		||||
AllowedIPs=%s
 | 
			
		||||
`
 | 
			
		||||
 | 
			
		||||
var win *ui.Window
 | 
			
		||||
var (
 | 
			
		||||
	private, public, psk string
 | 
			
		||||
	devname              string = "wg0"
 | 
			
		||||
	desc                 string = "WireGuard tunnel/listener ()"
 | 
			
		||||
 | 
			
		||||
	peerpublic  string
 | 
			
		||||
	peerip      string
 | 
			
		||||
	peerallowed string = "0.0.0.0/0"
 | 
			
		||||
)
 | 
			
		||||
var wgexe string
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	if runtime.GOOS == "windows" {
 | 
			
		||||
		wgexe = "wg.exe"
 | 
			
		||||
	} else {
 | 
			
		||||
		wgexe = "wg"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func readStringFromCommands(stdin io.Reader, cmd string, args ...string) (string, error) {
 | 
			
		||||
	runner := exec.Command(cmd, args...)
 | 
			
		||||
	runner.Stdin = stdin
 | 
			
		||||
	genkey_out, err := runner.Output()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Remove unprintable chars at the end
 | 
			
		||||
	str := string(genkey_out)
 | 
			
		||||
	for str[len(str)-1] == '\n' {
 | 
			
		||||
		str = str[:len(str)-1]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return str, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func resetKeys() {
 | 
			
		||||
 | 
			
		||||
	var err error
 | 
			
		||||
	private, err = readStringFromCommands(nil, wgexe, "genkey")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ui.MsgBox(win, "wg genkey error", err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public, err = readStringFromCommands(strings.NewReader(private), wgexe, "pubkey")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ui.MsgBox(win, "wg pubkey error", err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func resetPsk() {
 | 
			
		||||
	var err error
 | 
			
		||||
	psk, err = readStringFromCommands(strings.NewReader(private), wgexe, "genpsk")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ui.MsgBox(win, "wg genpsk error", err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func resetConfig() string {
 | 
			
		||||
	buf := &strings.Builder{}
 | 
			
		||||
 | 
			
		||||
	fmt.Fprintf(buf, ConfigBody, devname, desc, private)
 | 
			
		||||
	fmt.Fprintf(buf, ConfigPeer, peerpublic, psk, peerallowed)
 | 
			
		||||
	if len(peerip) > 0 {
 | 
			
		||||
		fmt.Fprintf(buf, "Endpoint=%s\n", peerip)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return buf.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setup() {
 | 
			
		||||
	resetKeys()
 | 
			
		||||
	resetPsk()
 | 
			
		||||
 | 
			
		||||
	win = ui.NewWindow("WireGuard Generator", 500, 700, false)
 | 
			
		||||
	win.OnClosing(func(*ui.Window) bool {
 | 
			
		||||
		ui.Quit()
 | 
			
		||||
		return true
 | 
			
		||||
	})
 | 
			
		||||
	ui.OnShouldQuit(func() bool {
 | 
			
		||||
		win.Destroy()
 | 
			
		||||
		return true
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	muti := ui.NewMultilineEntry()
 | 
			
		||||
 | 
			
		||||
	vbox := ui.NewVerticalBox()
 | 
			
		||||
	vbox.SetPadded(true)
 | 
			
		||||
 | 
			
		||||
	form := ui.NewForm()
 | 
			
		||||
	form.SetPadded(true)
 | 
			
		||||
 | 
			
		||||
	entry1 := ui.NewEntry()
 | 
			
		||||
	entry1.SetReadOnly(true)
 | 
			
		||||
	entry1.SetText(private)
 | 
			
		||||
	entry2 := ui.NewEntry()
 | 
			
		||||
	entry2.SetText(public)
 | 
			
		||||
	entry2.SetReadOnly(true)
 | 
			
		||||
	entry3 := ui.NewEntry()
 | 
			
		||||
	entry3.SetText(psk)
 | 
			
		||||
	entry3.OnChanged(func(e *ui.Entry) {
 | 
			
		||||
		psk = e.Text()
 | 
			
		||||
		muti.SetText(resetConfig())
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	form.Append("Private", entry1, false)
 | 
			
		||||
	form.Append("Public", entry2, false)
 | 
			
		||||
	form.Append("PSK", entry3, false)
 | 
			
		||||
	vbox.Append(form, false)
 | 
			
		||||
 | 
			
		||||
	hbox_buttons := ui.NewHorizontalBox()
 | 
			
		||||
	hbox_buttons.SetPadded(true)
 | 
			
		||||
 | 
			
		||||
	button1 := ui.NewButton("Generate Keys")
 | 
			
		||||
	button1.OnClicked(func(*ui.Button) {
 | 
			
		||||
		resetKeys()
 | 
			
		||||
		entry1.SetText(private)
 | 
			
		||||
		entry2.SetText(public)
 | 
			
		||||
		muti.SetText(resetConfig())
 | 
			
		||||
	})
 | 
			
		||||
	button2 := ui.NewButton("Generate PSK")
 | 
			
		||||
	button2.OnClicked(func(*ui.Button) {
 | 
			
		||||
		resetPsk()
 | 
			
		||||
		entry3.SetText(psk)
 | 
			
		||||
		muti.SetText(resetConfig())
 | 
			
		||||
	})
 | 
			
		||||
	hbox_buttons.Append(button1, true)
 | 
			
		||||
	hbox_buttons.Append(button2, true)
 | 
			
		||||
	vbox.Append(hbox_buttons, false)
 | 
			
		||||
 | 
			
		||||
	// Device  Name
 | 
			
		||||
	vbox.Append(ui.NewHorizontalSeparator(), false)
 | 
			
		||||
	form_dev := ui.NewForm()
 | 
			
		||||
	form_dev.SetPadded(true)
 | 
			
		||||
 | 
			
		||||
	dev_entry1 := ui.NewEntry()
 | 
			
		||||
	dev_entry1.SetText(devname)
 | 
			
		||||
	dev_entry2 := ui.NewEntry()
 | 
			
		||||
	dev_entry2.SetText(desc)
 | 
			
		||||
	dev_entry1.OnChanged(func(e *ui.Entry) {
 | 
			
		||||
		devname = e.Text()
 | 
			
		||||
		muti.SetText(resetConfig())
 | 
			
		||||
	})
 | 
			
		||||
	dev_entry2.OnChanged(func(e *ui.Entry) {
 | 
			
		||||
		desc = e.Text()
 | 
			
		||||
		muti.SetText(resetConfig())
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	form_dev.Append("Device name", dev_entry1, false)
 | 
			
		||||
	form_dev.Append("Description", dev_entry2, false)
 | 
			
		||||
	vbox.Append(form_dev, false)
 | 
			
		||||
 | 
			
		||||
	// Peer
 | 
			
		||||
	vbox.Append(ui.NewHorizontalSeparator(), false)
 | 
			
		||||
 | 
			
		||||
	form2 := ui.NewForm()
 | 
			
		||||
	form2.SetPadded(true)
 | 
			
		||||
 | 
			
		||||
	peer_entry1 := ui.NewEntry()
 | 
			
		||||
	peer_entry1.SetText(peerpublic)
 | 
			
		||||
	peer_entry2 := ui.NewEntry()
 | 
			
		||||
	peer_entry2.SetText(peerip)
 | 
			
		||||
	peer_entry3 := ui.NewEntry()
 | 
			
		||||
	peer_entry3.SetText(peerallowed)
 | 
			
		||||
	peer_entry1.OnChanged(func(e *ui.Entry) {
 | 
			
		||||
		peerpublic = e.Text()
 | 
			
		||||
		muti.SetText(resetConfig())
 | 
			
		||||
	})
 | 
			
		||||
	peer_entry2.OnChanged(func(e *ui.Entry) {
 | 
			
		||||
		peerip = e.Text()
 | 
			
		||||
		muti.SetText(resetConfig())
 | 
			
		||||
	})
 | 
			
		||||
	peer_entry3.OnChanged(func(e *ui.Entry) {
 | 
			
		||||
		peerallowed = e.Text()
 | 
			
		||||
		muti.SetText(resetConfig())
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	form2.Append("Peer public", peer_entry1, false)
 | 
			
		||||
	form2.Append("Endpoint", peer_entry2, false)
 | 
			
		||||
	form2.Append("Allowed IPs", peer_entry3, false)
 | 
			
		||||
	vbox.Append(form2, false)
 | 
			
		||||
 | 
			
		||||
	muti.SetText(resetConfig())
 | 
			
		||||
	vbox.Append(muti, true)
 | 
			
		||||
 | 
			
		||||
	win.SetChild(vbox)
 | 
			
		||||
	win.SetMargined(true)
 | 
			
		||||
	win.Show()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	ui.Main(setup)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user