summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile5
-rw-r--r--errorBox.go8
-rw-r--r--fix.go13
-rw-r--r--go.mod2
-rw-r--r--gui.go43
-rw-r--r--hostnameStatus.go38
-rw-r--r--ipv6box.go110
-rw-r--r--main.go15
-rw-r--r--structs.go3
9 files changed, 162 insertions, 75 deletions
diff --git a/Makefile b/Makefile
index e273177..a0c49d0 100644
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,11 @@ run: build
# ./control-panel-dns >/tmp/witgui.log.stderr 2>&1
./control-panel-dns
+redomod:
+ rm -f go.*
+ go mod init
+ go mod tidy
+
install:
go install -v go.wit.com/control-panel-dns@latest
# go install -v go.wit.com/control-panel-dns@latest
diff --git a/errorBox.go b/errorBox.go
index 638e84c..dab2016 100644
--- a/errorBox.go
+++ b/errorBox.go
@@ -11,7 +11,7 @@ import (
)
type errorBox struct {
- name string // the problem name
+ ready bool
parent *gui.Node
group *gui.Node
@@ -49,11 +49,17 @@ func NewErrorBox(p *gui.Node, name string, ip string) *errorBox {
eb.grid.NewLabel("")
eb.fixes = make(map[string]*anError)
+ eb.ready = true
return eb
}
+func (eb *errorBox) Ready() bool {
+ if eb == nil {return false}
+ return eb.ready
+}
func (eb *errorBox) add(kind string, ip string) bool {
+ if ! eb.Ready() {return false}
tmp := kind + " " + ip
if eb.fixes[tmp] != nil {
log.Log(WARN, "Error is already here", kind, ip)
diff --git a/fix.go b/fix.go
index 7986b07..d0a5eeb 100644
--- a/fix.go
+++ b/fix.go
@@ -150,19 +150,10 @@ func exists(m map[string]bool, s string) bool {
return false
}
-var myErrorBox *errorBox
-
func addToFixWindow(t string, ip string) {
log.Log(INFO, "addToFixWindow() START")
- if me.fixWindow == nil {
- log.Log(WARN, "addToFixWindow() fixWindow == nil. Can't add the error", t, ip)
- return
- }
- if myErrorBox == nil {
- box := me.fixWindow.Box()
- myErrorBox = NewErrorBox(box, t, ip)
- }
- myErrorBox.add(t, ip)
+ if ! me.problems.Ready() { return }
+ me.problems.add(t, ip)
log.Log(INFO, "addToFixWindow() END")
}
diff --git a/go.mod b/go.mod
index 527e5a0..9a39326 100644
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,3 @@
-module go.wit.com/control-panels/dns
+module go.wit.com/apps/control-panel-dns
go 1.21.4
diff --git a/gui.go b/gui.go
index 1e8fd10..191ab63 100644
--- a/gui.go
+++ b/gui.go
@@ -81,41 +81,15 @@ func myDefaultExit(n *gui.Node) {
func mainWindow(title string) {
me.window = gadgets.NewBasicWindow(me.myGui, title)
+ me.window.Vertical()
- gr := me.window.Box().NewGroup("dns update")
+ hbox := me.window.Box().NewBox("bw hbox", true)
- // This is where you figure out what to do next to fix the problems
- me.fixButton = gr.NewButton("Check Errors", func () {
- if ! fix() {
- log.Log(CHANGE, "boo. IPv6 isn't working yet")
- return
- }
- log.Log(CHANGE, "IPv6 WORKED")
- // update everything here visually for the user
- // hostname := me.statusOS.GetHostname()
- // me.hostname.Set(hostname)
- me.hostnameStatus.Set("WORKING")
- me.DnsStatus.Set("WORKING")
- me.fixButton.SetText("No Errors!")
- me.fixButton.Disable()
- })
+ statusGrid(hbox)
- statusGrid(me.window.Box())
+ // some artificial padding to make the last row of buttons look less wierd
+ gr := hbox.NewGroup("Development and Debugging Windows")
- gr = me.window.Box().NewGroup("")
-/*
- me.statusDNSbutton = gr.NewButton("hostname status", func () {
- if ! me.statusDNS.Ready() {return}
- me.statusDNS.window.Toggle()
- })
- gr.NewButton("Linux Status", func () {
- me.statusOS.Toggle()
- })
- gr.NewButton("resolver status", func () {
- if ! me.digStatus.Ready() {return}
- me.digStatus.window.Toggle()
- })
-*/
gr.NewButton("Debug", func () {
me.debug.Toggle()
})
@@ -143,6 +117,10 @@ func mainWindow(title string) {
}
me.fixWindow.Toggle()
})
+
+ // These are your problems
+ me.problems = NewErrorBox(me.window.Box(), "Errors", "has problems?")
+ me.problems.add("SOMETHING", "1:1:1:1:3")
}
@@ -188,7 +166,4 @@ func statusGrid(n *gui.Node) {
}
}
})
-
- n.NewGroup("NOTES")
-
}
diff --git a/hostnameStatus.go b/hostnameStatus.go
index e94ab15..34bcc4f 100644
--- a/hostnameStatus.go
+++ b/hostnameStatus.go
@@ -224,27 +224,6 @@ func (hs *hostnameStatus) existsAAAA(s string) bool {
return false
}
-/*
-// figure out if I'm missing any IPv6 address in DNS
-func (hs *hostnameStatus) missingAAAA() bool {
- var aaaa []string
- aaaa = dhcpAAAA()
- for _, s := range aaaa {
- log.Log(NET, "my actual AAAA = ",s)
- if hs.existsAAAA(s) {
- log.Log(NOW, "my actual AAAA already exists in DNS =",s)
- } else {
- log.Log(NOW, "my actual AAAA is missing from DNS",s)
- hs.dnsValue.SetText(s)
- hs.dnsAction.SetText("CREATE")
- return true
- }
- }
-
- return false
-}
-*/
-
func (hs *hostnameStatus) GetIPv6() []string {
if ! hs.Ready() { return nil}
return strings.Split(hs.dnsAAAA.Get(), "\n")
@@ -322,10 +301,21 @@ func (hs *hostnameStatus) updateStatus() {
hs.status.Set("BROKEN")
}
+ last := hs.statusIPv6.Get()
if hs.verifyIPv6() {
- hs.statusIPv6.Set("WORKING")
+ if last != "WORKING" {
+ log.Log(CHANGE, "Your DNS IPv6 has started working.", me.statusOS.GetHostname(), "should now work")
+ hs.changed = true
+ hs.statusIPv6.Set("WORKING")
+ me.DnsStatus.SetText("WORKING")
+ }
} else {
- hs.statusIPv6.Set("BROKEN")
+ if last != "BROKEN" {
+ log.Log(CHANGE, "Your DNS entries for IPv6 have BROKEN")
+ hs.changed = true
+ hs.statusIPv6.Set("BROKEN")
+ me.DnsStatus.SetText("BROKEN")
+ }
}
}
@@ -357,6 +347,7 @@ func (hs *hostnameStatus) verifyIPv6() bool {
} else {
working = false
log.Log(INFO, "DNS AAAA is not in OS", aaaa)
+ addToFixWindow("DELETE", aaaa)
}
}
@@ -366,6 +357,7 @@ func (hs *hostnameStatus) verifyIPv6() bool {
} else {
working = false
log.Log(INFO, "OS AAAA is not in DNS", aaaa)
+ addToFixWindow("CREATE", aaaa)
}
}
diff --git a/ipv6box.go b/ipv6box.go
new file mode 100644
index 0000000..dabdc03
--- /dev/null
+++ b/ipv6box.go
@@ -0,0 +1,110 @@
+/*
+ Show your IPv6 addresses
+*/
+
+package main
+
+import (
+ "go.wit.com/log"
+ "go.wit.com/gui/gui"
+ "go.wit.com/gui/gadgets"
+)
+
+type ipv6box struct {
+ name string // the problem name
+
+ parent *gui.Node
+ group *gui.Node
+ grid *gui.Node
+
+ l *gui.Node
+ b *gui.Node
+
+ fixes map[string]*anError
+
+ something *gadgets.OneLiner
+}
+
+type anIPv6 struct {
+ kind string // what kind of error is it?
+ aaaa string
+ status string
+
+ kindLabel *gui.Node
+ ipLabel *gui.Node
+ statusLabel *gui.Node
+ button *gui.Node
+}
+
+func NewIpv6box(p *gui.Node, name string, ip string) *ipv6box {
+ var ib *ipv6box
+ ib = new(ipv6box)
+ ib.parent = p
+ ib.group = p.NewGroup(name)
+ ib.grid = ib.group.NewGrid("stuff", 4, 1)
+
+ ib.grid.NewLabel("Type")
+ ib.grid.NewLabel("IP")
+ ib.grid.NewLabel("Status")
+ ib.grid.NewLabel("")
+
+ ib.fixes = make(map[string]*anError)
+ return ib
+}
+
+
+func (ib *ipv6box) add(kind string, ip string) bool {
+ tmp := kind + " " + ip
+ if ib.fixes[tmp] != nil {
+ log.Log(WARN, "Error is already here", kind, ip)
+ return false
+ }
+
+ anErr := new(anError)
+ anErr.kind = kind
+ anErr.aaaa = ip
+
+ anErr.kindLabel = ib.grid.NewLabel(kind)
+ anErr.ipLabel = ib.grid.NewLabel(ip)
+ anErr.statusLabel = ib.grid.NewLabel("")
+ anErr.button = ib.grid.NewButton(kind, func() {
+ log.Log(WARN, "got", kind, "here. IP =", ip)
+ ib.fix(tmp)
+ })
+ ib.fixes[tmp] = anErr
+ return false
+}
+
+func (ib *ipv6box) fix(key string) bool {
+ if ib.fixes[key] == nil {
+ log.Log(WARN, "Unknown error. could not find key =", key)
+ log.Log(WARN, "TODO: probably remove this error. key =", key)
+ return true
+ }
+ myErr := ib.fixes[key]
+ log.Log(WARN, "should try to fix", myErr.kind, "here. IP =", myErr.aaaa)
+ if myErr.kind == "DELETE" {
+ if deleteFromDNS(myErr.aaaa) {
+ log.Log(INFO, "Delete AAAA", myErr.aaaa, "Worked")
+ } else {
+ log.Log(INFO, "Delete AAAA", myErr.aaaa, "Failed")
+ }
+ return true
+ }
+ if myErr.kind == "CREATE" {
+ if addToDNS(myErr.aaaa) {
+ log.Log(INFO, "Delete AAAA", myErr.aaaa, "Worked")
+ } else {
+ log.Log(INFO, "Delete AAAA", myErr.aaaa, "Failed")
+ }
+ return true
+ }
+ return false
+}
+
+func (ib *ipv6box) update() bool {
+ return false
+}
+
+func (ib *ipv6box) toggle() {
+}
diff --git a/main.go b/main.go
index c805341..f1801b2 100644
--- a/main.go
+++ b/main.go
@@ -128,23 +128,28 @@ func main() {
// check the four known things to see if they are all WORKING
myTicker(10 * time.Second, "MAIN LOOP", func() {
+ var working bool = true
if me.hostnameStatus.GetText() != "WORKING" {
log.Log(CHANGE, "The hostname is not WORKING yet", me.hostnameStatus.GetText())
- return
+ working = false
}
if me.statusIPv6.Get() != "WORKING" {
log.Log(CHANGE, "IPv6 DNS lookup has not been confirmed yet", me.statusIPv6.Get())
- return
+ working = false
}
if me.DnsStatus.GetText() != "WORKING" {
log.Log(CHANGE, "Your IPv6 DNS settings have not been confirmed yet", me.DnsStatus.GetText())
- return
+ working = false
}
if me.DnsAPIstatus.GetText() != "WORKING" {
log.Log(CHANGE, "The DNS API provider is not yet working", me.DnsAPIstatus.GetText())
- return
+ working = false
+ }
+ if working {
+ log.Log(CHANGE, "EVERYTHING IS WORKING. YOU HAVE IPv6 BLISS. TODO: don't check so often now")
+ } else {
+ log.Log(CHANGE, "EVERYTHING IS NOT WORKING. Probably run fix() here?")
}
- log.Log(CHANGE, "EVERYTHING IS WORKING. YOU HAVE IPv6 BLISS. TODO: don't check so often now")
})
}
diff --git a/structs.go b/structs.go
index 86c3880..863bdce 100644
--- a/structs.go
+++ b/structs.go
@@ -63,6 +63,9 @@ type Host struct {
witcom *gadgets.BasicWindow
fixButton *gui.Node
fixWindow *smartwindow.SmartWindow
+
+ errorGroup *gui.Node // Hide() and Show() this node if there are no errors
+ problems *errorBox
}
type IPtype struct {