Compare commits

...

7 Commits

Author SHA1 Message Date
Jeff Carr fc6c72740b ready to debug 'gui/cloudflare'
Signed-off-by: Jeff Carr <jcarr@wit.com>
2024-01-05 01:07:34 -06:00
Jeff Carr 0592636049 all engines are starting without the rocket exploding
Signed-off-by: Jeff Carr <jcarr@wit.com>
2024-01-05 00:42:15 -06:00
Jeff Carr ee6c4e2a72 almost starting all the engines on startup
Signed-off-by: Jeff Carr <jcarr@wit.com>
2024-01-05 00:30:58 -06:00
Jeff Carr fdcd51d211 hide extra windows by default
Signed-off-by: Jeff Carr <jcarr@wit.com>
2024-01-05 00:11:48 -06:00
Jeff Carr ff21dba712 convert to gadget.BasicWindow()
Signed-off-by: Jeff Carr <jcarr@wit.com>
2024-01-05 00:07:13 -06:00
Jeff Carr 3baa63dadf first gadgets.BasicWindow()
Signed-off-by: Jeff Carr <jcarr@wit.com>
2024-01-04 22:01:39 -06:00
Jeff Carr d52dc52734 working logSettings window
Signed-off-by: Jeff Carr <jcarr@wit.com>
2024-01-04 12:22:14 -06:00
9 changed files with 64 additions and 301 deletions

View File

@ -2,7 +2,7 @@
run: build run: build
# ./control-panel-dns >/tmp/witgui.log.stderr 2>&1 # ./control-panel-dns >/tmp/witgui.log.stderr 2>&1
./control-panel-dns --debugger ./control-panel-dns
install: install:
go install -v go.wit.com/control-panel-dns@latest go install -v go.wit.com/control-panel-dns@latest

View File

@ -35,10 +35,9 @@ type digStatus struct {
statusIPv6 string statusIPv6 string
parent *gui.Node parent *gui.Node
window *gui.Node window *gadgets.BasicWindow
group *gui.Node group *gui.Node
grid *gui.Node grid *gui.Node
box *gui.Node
summary *gui.Node summary *gui.Node
status *gadgets.OneLiner status *gadgets.OneLiner
@ -93,15 +92,11 @@ func NewDigStatusWindow(p *gui.Node) *digStatus {
ds.ready = false ds.ready = false
ds.hidden = true ds.hidden = true
ds.window = p.NewWindow("DNS Resolver Status") ds.window = gadgets.NewBasicWindow(p, "DNS Resolver Status")
ds.window.Custom = func () { ds.window.Hide()
ds.hidden = true
ds.window.Hide()
}
ds.box = ds.window.NewBox("hBox", true)
// summary of the current state of things // summary of the current state of things
ds.summary = ds.box.NewGroup("Summary") ds.summary = ds.window.Box().NewGroup("Summary")
g := ds.summary.NewGrid("LookupStatus", 2, 2) g := ds.summary.NewGrid("LookupStatus", 2, 2)
g.Pad() g.Pad()
@ -112,7 +107,7 @@ func NewDigStatusWindow(p *gui.Node) *digStatus {
ds.speedActual = gadgets.NewOneLiner(g, "actual").Set("unknown") ds.speedActual = gadgets.NewOneLiner(g, "actual").Set("unknown")
// make the area to store the raw details // make the area to store the raw details
ds.details = ds.box.NewGroup("Details") ds.details = ds.window.Box().NewGroup("Details")
ds.dsLocalhost = NewDnsStatus(ds.details, "(localhost)", "127.0.0.1:53", "go.wit.com") ds.dsLocalhost = NewDnsStatus(ds.details, "(localhost)", "127.0.0.1:53", "go.wit.com")
ds.dsLocalNetwork = NewDnsStatus(ds.details, "(Local Network)", "172.22.0.1:53", "go.wit.com") ds.dsLocalNetwork = NewDnsStatus(ds.details, "(Local Network)", "172.22.0.1:53", "go.wit.com")
ds.dsCloudflare = NewDnsStatus(ds.details, "(cloudflare)", "1.1.1.1:53", "go.wit.com") ds.dsCloudflare = NewDnsStatus(ds.details, "(cloudflare)", "1.1.1.1:53", "go.wit.com")

41
go.mod
View File

@ -1,42 +1,3 @@
module go.wit.com/control-panel-dns module go.wit.com/control-panels/dns
go 1.21.4 go 1.21.4
require (
github.com/Showmax/go-fqdn v1.0.0
github.com/alexflint/go-arg v1.4.3
github.com/creack/pty v1.1.21
github.com/davecgh/go-spew v1.1.1
github.com/fsnotify/fsnotify v1.7.0
github.com/golang/protobuf v1.5.3
github.com/jsimonetti/rtnetlink v1.4.0
github.com/miekg/dns v1.1.57
github.com/rs/dnstrace v1.4.1
go.wit.com/gui v0.9.2
go.wit.com/shell v0.0.0-20231220210920-25715e30ee82
golang.org/x/term v0.15.0
)
require (
github.com/alexflint/go-scalar v1.1.0 // indirect
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/josharian/native v1.1.0 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/mdlayher/netlink v1.7.2 // indirect
github.com/mdlayher/socket v0.4.1 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/svent/go-nbreader v0.0.0-20150201200112-7cef48da76dc // indirect
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef // indirect
github.com/wercker/journalhook v0.0.0-20230927020745-64542ffa4117 // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.9.0 // indirect
golang.org/x/crypto v0.17.0 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sync v0.4.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/tools v0.13.0 // indirect
google.golang.org/protobuf v1.26.0 // indirect
)

88
go.sum
View File

@ -1,88 +0,0 @@
github.com/Showmax/go-fqdn v1.0.0 h1:0rG5IbmVliNT5O19Mfuvna9LL7zlHyRfsSvBPZmF9tM=
github.com/Showmax/go-fqdn v1.0.0/go.mod h1:SfrFBzmDCtCGrnHhoDjuvFnKsWjEQX/Q9ARZvOrJAko=
github.com/alexflint/go-arg v1.4.3 h1:9rwwEBpMXfKQKceuZfYcwuc/7YY7tWJbFsgG5cAU/uo=
github.com/alexflint/go-arg v1.4.3/go.mod h1:3PZ/wp/8HuqRZMUUgu7I+e1qcpUbvmS258mRXkFH4IA=
github.com/alexflint/go-scalar v1.1.0 h1:aaAouLLzI9TChcPXotr6gUhq+Scr8rl0P9P4PnltbhM=
github.com/alexflint/go-scalar v1.1.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o=
github.com/cilium/ebpf v0.12.3 h1:8ht6F9MquybnY97at+VDZb3eQQr8ev79RueWeVaEcG4=
github.com/cilium/ebpf v0.12.3/go.mod h1:TctK1ivibvI3znr66ljgi4hqOT8EYQjz1KWBfb1UVgM=
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU=
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0=
github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA=
github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/jsimonetti/rtnetlink v1.4.0 h1:Z1BF0fRgcETPEa0Kt0MRk3yV5+kF1FWTni6KUFKrq2I=
github.com/jsimonetti/rtnetlink v1.4.0/go.mod h1:5W1jDvWdnthFJ7fxYX1GMK07BUpI4oskfOqvPteYS6E=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g=
github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw=
github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U=
github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/dnstrace v1.4.1 h1:o6W+8hO9kGcdq9FZAVudpCyw6WXeD9XXamXyYiei/Hs=
github.com/rs/dnstrace v1.4.1/go.mod h1:pFQiHK1kt94r2csi+qAxUsJ58r74QbN2q4JCDuFYTeY=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/svent/go-nbreader v0.0.0-20150201200112-7cef48da76dc h1:usYkrH2/es/TT7ETdC/qLAagcJPW3EEYFKqvibSnFbA=
github.com/svent/go-nbreader v0.0.0-20150201200112-7cef48da76dc/go.mod h1:pPzZl0vMkUhyoxUF8PAGG5bDRGo7PY80oO/PMmpLkkc=
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef h1:7D6Nm4D6f0ci9yttWaKjM1TMAXrH5Su72dojqYGntFY=
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef/go.mod h1:WLFStEdnJXpjK8kd4qKLwQKX/1vrDzp5BcDyiZJBHJM=
github.com/wercker/journalhook v0.0.0-20230927020745-64542ffa4117 h1:67A5tweHp3C7osHjrYsy6pQZ00bYkTTttZ7kiOwwHeA=
github.com/wercker/journalhook v0.0.0-20230927020745-64542ffa4117/go.mod h1:XCsSkdKK4gwBMNrOCZWww0pX6AOt+2gYc5Z6jBRrNVg=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
go.wit.com/gui v0.9.2 h1:QHMYdwpV6MzKwmFUMGevKUDn2a6GAqHN2Ltx8V3HufI=
go.wit.com/gui v0.9.2/go.mod h1:asRXEYKmdjhtg1yiBi5A8YEY2YG4lWPS0gvNz4NXGDE=
go.wit.com/shell v0.0.0-20231220210920-25715e30ee82 h1:5YVB3Y2PHtH+oE8Y1SzWHIKnJ1SPQa09xNHEw9yxmAI=
go.wit.com/shell v0.0.0-20231220210920-25715e30ee82/go.mod h1:57dOTStlN5aao4EOCZFC+D47rF7In6qDZCjQoobJWcA=
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 h1:Jvc7gsqn21cJHCmAWx0LiimpP18LZmUxkT5Mp7EZ1mI=
golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

182
gui.go
View File

@ -6,7 +6,7 @@ import (
"os" "os"
"os/user" "os/user"
"strconv" "strconv"
"net" // "net"
"strings" "strings"
"go.wit.com/log" "go.wit.com/log"
@ -15,19 +15,17 @@ import (
"go.wit.com/gui/gui" "go.wit.com/gui/gui"
"go.wit.com/gui/gadgets" "go.wit.com/gui/gadgets"
"go.wit.com/gui/cloudflare" "go.wit.com/gui/cloudflare"
"go.wit.com/gui/debugger"
) )
// This setups up the dns control panel window // This setups up the dns control panel window
func setupControlPanelWindow() { func setupControlPanelWindow() {
me.window = myGui.NewWindow("DNS and IPv6 Control Panel")
// me.window.Dump() // will dump out some info
log.Info("artificial sleep of:", me.artificialSleep) log.Info("artificial sleep of:", me.artificialSleep)
log.Sleep(me.artificialSleep) log.Sleep(me.artificialSleep)
// setup the main tab // setup the main tab
dnsTab("DNS") mainWindow("DNS and IPv6 Control Panel")
detailsTab("Details") detailsTab("OS Details")
debugTab("Debug") debugTab("Debug")
// me.digStatus = NewDigStatusWindow(me.window) // me.digStatus = NewDigStatusWindow(me.window)
@ -36,9 +34,8 @@ func setupControlPanelWindow() {
func detailsTab(title string) { func detailsTab(title string) {
var g2 *gui.Node var g2 *gui.Node
tab := me.window.NewTab(title) me.details = gadgets.NewBasicWindow(me.myGui, title)
g2 = me.details.Box().NewGroup("Real Stuff")
g2 = tab.NewGroup("Real Stuff")
grid := g2.NewGrid("gridnuts", 2, 2) grid := g2.NewGrid("gridnuts", 2, 2)
@ -71,97 +68,38 @@ func detailsTab(title string) {
grid.NewLabel("refresh speed") grid.NewLabel("refresh speed")
me.LocalSpeedActual = grid.NewLabel("unknown") me.LocalSpeedActual = grid.NewLabel("unknown")
tab.Margin()
tab.Pad()
grid.Margin() grid.Margin()
grid.Pad() grid.Pad()
me.details.Hide()
} }
func debugTab(title string) { func debugTab(title string) {
var g2 *gui.Node var g2 *gui.Node
tab := me.window.NewTab(title) me.debug = gadgets.NewBasicWindow(me.myGui, title)
g2 = tab.NewGroup("Real Stuff") g2 = me.debug.Box().NewGroup("Real Stuff")
g2.NewButton("Network Interfaces", func () { g2.NewButton("GO GUI Debug Window", func () {
for i, t := range me.ifmap { debugger.DebugWindow(me.myGui)
log.Println("name =", t.iface.Name)
log.Println("int =", i, "name =", t.name, t.iface)
log.Println("iface = " + t.iface.Name)
}
}) })
g2.NewButton("Hostname", func () { g2.NewButton("getHostname() looks at the OS settings", func () {
getHostname() getHostname()
}) })
g2.NewButton("Actual AAAA & A", func () {
displayDNS() // doesn't re-query anything
})
g2.NewButton("dig A & AAAA DNS records", func () { g2.NewButton("dig A & AAAA DNS records", func () {
log.Println("updateDNS()") log.Println("updateDNS()")
updateDNS() updateDNS()
}) })
g2.NewButton("checkDNS:", func () {
ipv6s, ipv4s := checkDNS()
for s, _ := range ipv6s {
log.Log(NOW, "check if", s, "is in DNS")
}
for s, _ := range ipv4s {
log.Log(NOW, "check if", s, "is in DNS")
}
})
g2.NewButton("os.User()", func () {
user, _ := user.Current()
log.Println("os.Getuid =", user.Username, os.Getuid())
if (me.uid != nil) {
me.uid.SetText(user.Username + " (" + strconv.Itoa(os.Getuid()) + ")")
}
})
g2.NewButton("dig +trace", func () { g2.NewButton("dig +trace", func () {
o := shell.Run("dig +trace +noadditional DS " + me.hostname + " @8.8.8.8") o := shell.Run("dig +trace +noadditional DS " + me.hostname + " @8.8.8.8")
log.Println(o) log.Println(o)
}) })
g2.NewButton("Example_listLink()", func () { g2 = me.debug.Box().NewGroup("debugging options")
Example_listLink()
})
g2.NewButton("Escalate()", func () {
Escalate()
})
g2.NewButton("LookupAddr(<raw ipv6>) == fire from /etc/hosts", func () {
host, err := net.LookupAddr("2600:1700:afd5:6000:b26e:bfff:fe80:3c52")
if err != nil {
return
}
log.Println("host =", host)
})
g2.NewButton("DumpPublicDNSZone(apple.com)", func () {
DumpPublicDNSZone("apple.com")
dumpIPs("www.apple.com")
})
g2 = tab.NewGroup("debugging options")
// DEBUG flags
me.dbNet = g2.NewCheckbox("turn on network debugging)")
me.dbNet.Custom = func() {
log.Warn("TODO: re-implement")
}
me.dbProc = g2.NewCheckbox("turn on /proc debugging)")
me.dbProc.Custom = func() {
log.Warn("TODO: re-implement")
}
// makes a slider widget // makes a slider widget
me.ttl = gadgets.NewDurationSlider(g2, "Loop Timeout", 10 * time.Millisecond, 5 * time.Second) me.ttl = gadgets.NewDurationSlider(g2, "Loop Timeout", 10 * time.Millisecond, 5 * time.Second)
@ -173,6 +111,8 @@ func debugTab(title string) {
g2.Margin() g2.Margin()
g2.Pad() g2.Pad()
me.debug.Hide()
} }
// will return a AAAA value that needs to be deleted // will return a AAAA value that needs to be deleted
@ -244,11 +184,10 @@ func myDefaultExit(n *gui.Node) {
os.Exit(0) os.Exit(0)
} }
func dnsTab(title string) { func mainWindow(title string) {
tab := me.window.NewTab(title) me.window = gadgets.NewBasicWindow(me.myGui, title)
me.mainStatus = tab.NewGroup("dns update")
me.mainStatus = me.window.Box().NewGroup("dns update")
grid := me.mainStatus.NewGrid("gridnuts", 2, 2) grid := me.mainStatus.NewGrid("gridnuts", 2, 2)
grid.SetNext(1,1) grid.SetNext(1,1)
@ -263,77 +202,32 @@ func dnsTab(title string) {
grid.NewLabel("DNS A =") grid.NewLabel("DNS A =")
me.DnsA = grid.NewLabel("?") me.DnsA = grid.NewLabel("?")
me.fix = me.mainStatus.NewButton("Fix", func () { me.digStatus = NewDigStatusWindow(me.myGui)
if (goodHostname(me.hostname)) { me.hostnameStatus = NewHostnameStatusWindow(me.myGui)
log.Info("hostname is good:", me.hostname)
} else {
log.Warn("FIX: you need to fix your hostname here", me.hostname)
return
}
// check to see if the cloudflare window exists
/*
if (me.cloudflareW != nil) {
newRR.NameNode.SetText(me.hostname)
newRR.TypeNode.SetText("AAAA")
for s, t := range me.ipmap {
if (t.IsReal()) {
if (t.ipv6) {
newRR.ValueNode.SetText(s)
cloudflare.CreateCurlRR()
return
}
}
}
cloudflare.CreateCurlRR()
return
} else {
// nsupdate()
// me.fixProc.Disable()
}
*/
})
me.fix.Disable()
me.digStatusButton = me.mainStatus.NewButton("Resolver Status", func () { me.hostnameStatusButton = me.mainStatus.NewButton("Fix hostname DNS", func () {
if (me.digStatus == nil) { me.hostnameStatus.window.Toggle()
log.Info("drawing the digStatus window START")
me.digStatus = NewDigStatusWindow(myGui)
log.Info("drawing the digStatus window END")
me.digStatusButton.SetText("Hide DNS Lookup Status")
me.digStatus.Update()
return
}
if me.digStatus.hidden {
me.digStatusButton.SetText("Hide Resolver Status")
me.digStatus.Show()
me.digStatus.Update()
} else {
me.digStatusButton.SetText("Resolver Status")
me.digStatus.Hide()
}
})
me.hostnameStatusButton = me.mainStatus.NewButton("Show hostname DNS Status", func () {
if (me.hostnameStatus == nil) {
me.hostnameStatus = NewHostnameStatusWindow(myGui)
me.hostnameStatusButton.SetText("Hide " + me.hostname + " DNS Status")
me.hostnameStatus.Update()
return
}
if me.hostnameStatus.hidden {
me.hostnameStatusButton.SetText("Hide " + me.hostname + " DNS Status")
me.hostnameStatus.Show()
me.hostnameStatus.Update()
} else {
me.hostnameStatusButton.SetText("Show " + me.hostname + " DNS Status")
me.hostnameStatus.Hide()
}
}) })
grid.Margin() grid.Margin()
grid.Pad() grid.Pad()
statusGrid(tab) statusGrid(me.window.Box())
gr := me.window.Box().NewGroup("debugging")
gr.NewButton("GO GUI Debugger", func () {
debugger.DebugWindow(me.myGui)
})
gr.NewButton("OS Details", func () {
me.details.Toggle()
})
gr.NewButton("DNS Debug", func () {
me.debug.Toggle()
})
gr.NewButton("Resolver Status", func () {
if ! me.digStatus.Ready() {return}
me.digStatus.window.Toggle()
})
} }
func statusGrid(n *gui.Node) { func statusGrid(n *gui.Node) {

View File

@ -65,7 +65,7 @@ func getHostname() {
log.Log(CHANGE, "me.cloudflare == nil; me.DnsAPI.S =", me.DnsAPI.S) log.Log(CHANGE, "me.cloudflare == nil; me.DnsAPI.S =", me.DnsAPI.S)
if (me.DnsAPI.S == "cloudflare") { if (me.DnsAPI.S == "cloudflare") {
me.cloudflareB = me.mainStatus.NewButton("cloudflare wit.com", func () { me.cloudflareB = me.mainStatus.NewButton("cloudflare wit.com", func () {
cloudflare.CreateRR(myGui, "wit.com", "3777302ac4a78cd7fa4f6d3f72086d06") cloudflare.CreateRR(me.myGui, "wit.com", "3777302ac4a78cd7fa4f6d3f72086d06")
}) })
} }
} }

View File

@ -25,7 +25,7 @@ type hostnameStatus struct {
hostname string // my hostname. Example: "test.wit.com" hostname string // my hostname. Example: "test.wit.com"
window *gui.Node window *gadgets.BasicWindow
// Primary Directives // Primary Directives
status *gadgets.OneLiner status *gadgets.OneLiner
@ -62,13 +62,10 @@ func NewHostnameStatusWindow(p *gui.Node) *hostnameStatus {
hs.hidden = true hs.hidden = true
hs.hostname = me.hostname hs.hostname = me.hostname
hs.window = p.NewWindow( hs.hostname + " Status") hs.window = gadgets.NewBasicWindow(p, hs.hostname + " Status")
hs.window.Custom = func () { hs.window.Hide()
hs.hidden = true
hs.window.Hide() group := hs.window.Box().NewGroup("Summary")
}
box := hs.window.NewBox("hBox", true)
group := box.NewGroup("Summary")
grid := group.NewGrid("LookupStatus", 2, 2) grid := group.NewGrid("LookupStatus", 2, 2)
hs.status = gadgets.NewOneLiner(grid, "status").Set("unknown") hs.status = gadgets.NewOneLiner(grid, "status").Set("unknown")
@ -78,7 +75,7 @@ func NewHostnameStatusWindow(p *gui.Node) *hostnameStatus {
group.Pad() group.Pad()
grid.Pad() grid.Pad()
group = box.NewGroup("Details") group = hs.window.Box().NewGroup("Details")
grid = group.NewGrid("LookupDetails", 2, 2) grid = group.NewGrid("LookupDetails", 2, 2)
hs.hostShort = gadgets.NewOneLiner(grid, "hostname -s") hs.hostShort = gadgets.NewOneLiner(grid, "hostname -s")
@ -96,12 +93,12 @@ func NewHostnameStatusWindow(p *gui.Node) *hostnameStatus {
group.Pad() group.Pad()
grid.Pad() grid.Pad()
group = box.NewGroup("Actions") group = hs.window.Box().NewGroup("Actions")
grid = group.NewGrid("LookupDetails", 2, 2) grid = group.NewGrid("LookupDetails", 2, 2)
hs.dnsValue = grid.NewLabel("3.4.5.6") hs.dnsValue = grid.NewLabel("3.4.5.6")
hs.dnsAction = grid.NewButton("CHECK", func () { hs.dnsAction = grid.NewButton("CHECK", func () {
log.Info("should", hs.dnsAction.S, "here for", hs.dnsValue.S) log.Warn("should", hs.dnsAction.S, "here for", hs.dnsValue.S)
if (hs.dnsAction.S == "DELETE") { if (hs.dnsAction.S == "DELETE") {
hs.deleteDNSrecord(hs.dnsValue.S) hs.deleteDNSrecord(hs.dnsValue.S)
} }
@ -148,7 +145,7 @@ func (hs *hostnameStatus) createDNSrecord(value string) bool {
log.Info("createDNSrecord() DNS API Provider =", hs.API()) log.Info("createDNSrecord() DNS API Provider =", hs.API())
if (hs.API() == "cloudflare") { if (hs.API() == "cloudflare") {
log.Info("createDNSrecord() Try to delete via cloudflare") log.Warn("createDNSrecord() Try to delete via cloudflare:", me.hostname, value)
return cloudflare.Create(hs.Domain(), me.hostname, value) return cloudflare.Create(hs.Domain(), me.hostname, value)
} }
return false return false

View File

@ -20,8 +20,6 @@ import (
"github.com/miekg/dns" "github.com/miekg/dns"
) )
var myGui *gui.Node
//go:embed plugins/*.so //go:embed plugins/*.so
var resToolkit embed.FS var resToolkit embed.FS
@ -41,14 +39,14 @@ func main() {
// send all log() output to a file in /tmp // send all log() output to a file in /tmp
log.SetTmp() log.SetTmp()
myGui = gui.New().Default() me.myGui = gui.New().Default()
log.Sleep(me.artificialSleep) log.Sleep(me.artificialSleep)
setupControlPanelWindow() setupControlPanelWindow()
if debugger.ArgDebug() { if debugger.ArgDebug() {
log.Sleep(2) log.Sleep(2)
debugger.DebugWindow(myGui) debugger.DebugWindow(me.myGui)
} }
// forever monitor for network and dns changes // forever monitor for network and dns changes

View File

@ -41,7 +41,10 @@ type Host struct {
ipv4s map[string]dns.RR ipv4s map[string]dns.RR
ipv6s map[string]dns.RR ipv6s map[string]dns.RR
window *gui.Node // the main window window *gadgets.BasicWindow // the main window
details *gadgets.BasicWindow // more details of the DNS state
debug *gadgets.BasicWindow // more attempts to debug the DNS state
tab *gui.Node // the main dns tab tab *gui.Node // the main dns tab
notes *gui.Node // using this to put notes here notes *gui.Node // using this to put notes here
@ -80,6 +83,9 @@ type Host struct {
hostnameStatus *hostnameStatus hostnameStatus *hostnameStatus
hostnameStatusButton *gui.Node hostnameStatusButton *gui.Node
myDebug *gui.Node
myGui *gui.Node
} }
type IPtype struct { type IPtype struct {