diff --git a/argv.go b/argv.go index 324e7d7..e86eb08 100644 --- a/argv.go +++ b/argv.go @@ -11,7 +11,7 @@ import ( ) var args struct { - Daemon bool `arg:"--daemon" help:"run without a gui"` + Daemon bool `arg:"--daemon" help:"run without a gui"` } func init() { diff --git a/controlPanelWindow.go b/controlPanelWindow.go index c9e1917..dcdc59e 100644 --- a/controlPanelWindow.go +++ b/controlPanelWindow.go @@ -39,8 +39,15 @@ func makeMainWindow() { } } - me.autofix = group.NewCheckbox("Auto-correct Errors") - me.autofix.SetChecked(false) + autofix := group.NewCheckbox("Auto-correct Errors").SetChecked(true) + os.Setenv("DNS_AUTOCORRECT", "true") + autofix.Custom = func() { + if autofix.Checked() { + os.Setenv("DNS_AUTOCORRECT", "true") + } else { + os.Unsetenv("DNS_AUTOCORRECT") + } + } } func statusGrid(n *gui.Node) { diff --git a/errorBox.go b/errorBox.go index b2605e5..6991683 100644 --- a/errorBox.go +++ b/errorBox.go @@ -5,6 +5,7 @@ package main import ( + "os" "time" "go.wit.com/gui" @@ -146,8 +147,8 @@ func (eb *errorBox) fix(key string) bool { } myErr := eb.fixes[key] log.Log(WARN, "should try to fix", myErr.problem.kind, "here. IP =", myErr.problem.aaaa) - if !me.autofix.Checked() { - log.Log(WARN, "not autofixing. autofix == false") + if os.Getenv("DNS_AUTOCORRECT") != "true" { + log.Log(WARN, "not autofixing. $DNS_AUTOCORRECT != true") log.Log(WARN, "problem.kind =", myErr.problem.kind) log.Log(WARN, "problem.action =", myErr.problem.action) log.Log(WARN, "problem.aaaa =", myErr.problem.aaaa) diff --git a/fix.go b/fix.go index e052ec0..4025c34 100644 --- a/fix.go +++ b/fix.go @@ -2,6 +2,8 @@ package main import ( + "strings" + "go.wit.com/lib/gadgets" "go.wit.com/lib/gui/cloudflare" "go.wit.com/log" @@ -68,12 +70,20 @@ func fixIPv6dns() bool { log.Log(INFO, "What are the AAAA resource records in DNS?") for _, aaaa := range me.statusDNS.GetIPv6() { - log.Log(INFO, "FOUND DNS AAAA ip", aaaa) + log.Log(WARN, "statusDNS.GetIPv6() FOUND DNS AAAA ip", aaaa) dnsAAAA[aaaa] = "dns" } // remove old DNS entries first for aaaa, _ := range dnsAAAA { + aaaa = strings.TrimSpace(aaaa) + if aaaa == "" { + log.Log(WARN, "AAAA is blank") + log.Log(WARN, "AAAA is blank") + log.Log(WARN, "AAAA is blank sleep 10") + log.Sleep(10) + continue + } if osAAAA[aaaa] == "os" { log.Log(INFO, "DNS AAAA is in OS", aaaa) } else { diff --git a/hostnameStatusWindow.go b/hostnameStatusWindow.go index 5ce8ae9..c37f430 100644 --- a/hostnameStatusWindow.go +++ b/hostnameStatusWindow.go @@ -64,7 +64,7 @@ func InitHostnameStatus() *hostnameStatus { hs.hidden = true // hs.hostname = me.hostname - hs.window = gadgets.RawBasicWindow("fix hostname here"+" Status") + hs.window = gadgets.RawBasicWindow("fix hostname here" + " Status") hs.window.Make() // hs.window.Draw() // hs.window.Hide() @@ -118,7 +118,7 @@ func (hs *hostnameStatus) API() string { } func (hs *hostnameStatus) Update() { - log.Info("hostnameStatus() Update() START") + // log.Info("hostnameStatus() Update() START") if hs == nil { log.Error(errors.New("hostnameStatus() Update() hs == nil")) return @@ -136,7 +136,7 @@ func (hs *hostnameStatus) Update() { } else { hs.set(hs.speed, "FAST") } - log.Info("hostnameStatus() Update() END") + // log.Info("hostnameStatus() Update() END") } // Returns true if the status is valid @@ -227,7 +227,11 @@ func (hs *hostnameStatus) GetIPv6() []string { if !hs.Ready() { return nil } - return strings.Split(hs.dnsAAAA.String(), "\n") + // clean out any blank lines + // todo: fix this whole hacky thing + tmp := hs.dnsAAAA.String() + tmp = strings.TrimSpace(tmp) + return strings.Split(tmp, "\n") } func (hs *hostnameStatus) updateStatus() { @@ -305,7 +309,7 @@ func (hs *hostnameStatus) updateStatus() { } last := hs.statusIPv6.String() - if hs.verifyIPv6() { + if ok, err := hs.verifyIPv6(); ok { if last != "WORKING" { log.Log(CHANGE, "Your DNS IPv6 has started working.", me.statusOS.GetHostname(), "should now work") hs.changed = true @@ -314,7 +318,7 @@ func (hs *hostnameStatus) updateStatus() { } } else { if last != "BROKEN" { - log.Log(CHANGE, "Your DNS entries for IPv6 have BROKEN") + log.Log(CHANGE, "Your DNS entries for IPv6 have BROKEN", ok, err) hs.changed = true hs.statusIPv6.SetText("BROKEN") me.DnsStatus.SetText("BROKEN") @@ -322,8 +326,13 @@ func (hs *hostnameStatus) updateStatus() { } } -func (hs *hostnameStatus) verifyIPv6() bool { +var ErrorNoIPv6 error = errors.New("OS has no IPv6") +var ErrorDeleteIPv6 error = errors.New("IPv6 Delete") +var ErrorCreateIPv6 error = errors.New("IPv6 Create") + +func (hs *hostnameStatus) verifyIPv6() (bool, error) { var working bool = true + var err error = nil osAAAA := make(map[string]string) dnsAAAA := make(map[string]string) @@ -331,7 +340,7 @@ func (hs *hostnameStatus) verifyIPv6() bool { tmp := me.statusOS.GetIPv6() if len(tmp) == 0 { // you don't have any IPv6 addresses in your OS right now - return false + return false, ErrorNoIPv6 } for _, aaaa := range me.statusOS.GetIPv6() { log.Log(INFO, "FOUND OS AAAA ip", aaaa) @@ -351,6 +360,7 @@ func (hs *hostnameStatus) verifyIPv6() bool { working = false log.Log(INFO, "DNS AAAA is not in OS", aaaa) addToFixWindow("DELETE", aaaa) + err = ErrorDeleteIPv6 } } @@ -361,10 +371,11 @@ func (hs *hostnameStatus) verifyIPv6() bool { working = false log.Log(INFO, "OS AAAA is not in DNS", aaaa) addToFixWindow("CREATE", aaaa) + err = ErrorCreateIPv6 } } - return working + return working, err } func (hs *hostnameStatus) Show() { diff --git a/main.go b/main.go index 5e4d7e2..0896047 100644 --- a/main.go +++ b/main.go @@ -47,7 +47,7 @@ func main() { // These are your problems me.problems = InitErrorBox(me.window.Box(), "Errors", "has problems?") - me.problems.addIPerror(RR, USER, "1:1:1:1") + // me.problems.addIPerror(RR, USER, "1:1:1:1") me.window.Show() diff --git a/structs.go b/structs.go index 99a97e7..4a1f8b8 100644 --- a/structs.go +++ b/structs.go @@ -66,7 +66,7 @@ type Host struct { showErrorsB *gui.Node problems *errorBox - autofix *gui.Node + // autofix *gui.Node } type IPtype struct {