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