Initial commit
This commit is contained in:
commit
3784b6f1af
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)
|
||||
}
|
Loading…
Reference in New Issue
Block a user