Compare commits
No commits in common. "d04767a0ff417af97034e01b1b5a7b577739c980" and "74bfddc1e4f3c459bfc30e13113b73e127f7e402" have entirely different histories.
d04767a0ff
...
74bfddc1e4
14
Makefile
14
Makefile
|
@ -1,18 +1,8 @@
|
||||||
.PHONY: debian
|
.PHONY: debian
|
||||||
|
|
||||||
|
|
||||||
run: build
|
run: build
|
||||||
# ./control-panel-dns >/tmp/witgui.log.stderr 2>&1
|
# ./control-panel-dns >/tmp/witgui.log.stderr 2>&1
|
||||||
cp -f control-panel-dns ~/
|
./control-panel-dns
|
||||||
./control-panel-dns --tmp-log
|
|
||||||
|
|
||||||
check-git-clean:
|
|
||||||
@git diff-index --quiet HEAD -- || (echo "Git repository is dirty, please commit your changes first"; exit 1)
|
|
||||||
|
|
||||||
redomod: check-git-clean
|
|
||||||
rm -f go.*
|
|
||||||
GO111MODULE= go mod init
|
|
||||||
GO111MODULE= go mod tidy
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
go install -v go.wit.com/control-panel-dns@latest
|
go install -v go.wit.com/control-panel-dns@latest
|
||||||
|
@ -27,7 +17,7 @@ build:
|
||||||
-mkdir -p plugins/
|
-mkdir -p plugins/
|
||||||
-cp ~/go/src/go.wit.com/gui/toolkits/*.so plugins/
|
-cp ~/go/src/go.wit.com/gui/toolkits/*.so plugins/
|
||||||
# GO111MODULE="off" go get -v -x .
|
# GO111MODULE="off" go get -v -x .
|
||||||
GO111MODULE="off" go build -v
|
GO111MODULE="off" go build -v -o control-panel-dns
|
||||||
|
|
||||||
# ./control-panel-dns.v1: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./control-panel-dns.v1)
|
# ./control-panel-dns.v1: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./control-panel-dns.v1)
|
||||||
# ./control-panel-dns.v1: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./control-panel-dns.v1)
|
# ./control-panel-dns.v1: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./control-panel-dns.v1)
|
||||||
|
|
55
args.go
55
args.go
|
@ -15,41 +15,44 @@ import (
|
||||||
|
|
||||||
var args struct {
|
var args struct {
|
||||||
Display string `arg:"env:DISPLAY"`
|
Display string `arg:"env:DISPLAY"`
|
||||||
TmpLog bool `arg:"--tmp-log" help:"automatically send STDOUT to /tmp"`
|
|
||||||
VerboseDNS bool `arg:"--verbose-dns" help:"debug your dns settings"`
|
VerboseDNS bool `arg:"--verbose-dns" help:"debug your dns settings"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var NOW *log.LogFlag
|
var NOW log.LogFlag
|
||||||
var INFO *log.LogFlag
|
var INFO log.LogFlag
|
||||||
var NET *log.LogFlag
|
var NET log.LogFlag
|
||||||
var DNS *log.LogFlag
|
var DNS log.LogFlag
|
||||||
|
var WARN log.LogFlag
|
||||||
|
var SPEW log.LogFlag
|
||||||
|
var CHANGE log.LogFlag
|
||||||
|
var STATUS log.LogFlag
|
||||||
|
|
||||||
var WARN *log.LogFlag
|
func myreg(f *log.LogFlag, b bool, name string, desc string) {
|
||||||
var SPEW *log.LogFlag
|
f.B = b
|
||||||
|
f.Subsystem = "go.wit.com/control-panels/dns"
|
||||||
var CHANGE *log.LogFlag
|
f.Short = "cpdns"
|
||||||
var STATUS *log.LogFlag
|
f.Desc = desc
|
||||||
|
f.Name = name
|
||||||
|
f.Register()
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
arg.MustParse(&args)
|
arg.MustParse(&args)
|
||||||
full := "go.wit.com/control-panels/dns"
|
// fmt.Println(args.Foo, args.Bar, args.User)
|
||||||
short := "cpdns"
|
|
||||||
|
|
||||||
NOW = log.NewFlag( "NOW", true, full, short, "temp debugging stuff")
|
myreg(&NOW, true, "NOW", "temp debugging stuff")
|
||||||
INFO = log.NewFlag("INFO", false, full, short, "normal debugging stuff")
|
myreg(&INFO, false, "INFO", "normal debugging stuff")
|
||||||
NET = log.NewFlag( "NET", false, full, short, "Network logging")
|
myreg(&NET, false, "NET", "Network logging")
|
||||||
DNS = log.NewFlag( "DNS", false, full, short, "dnsStatus.update()")
|
myreg(&DNS, false, "DNS", "dnsStatus.update()")
|
||||||
|
myreg(&WARN, true, "WARN", "bad things")
|
||||||
WARN = log.NewFlag("WARN", true, full, short, "bad things")
|
myreg(&SPEW, false, "SPEW", "spew stuff")
|
||||||
SPEW = log.NewFlag("SPEW", false, full, short, "spew stuff")
|
myreg(&CHANGE, true, "CHANGE", "when host or dns change")
|
||||||
|
myreg(&STATUS, false, "STATUS", "updateStatus()")
|
||||||
CHANGE = log.NewFlag("CHANGE", true, full, short, "when host or dns change")
|
|
||||||
STATUS = log.NewFlag("STATUS", false, full, short, "updateStatus() polling")
|
|
||||||
|
|
||||||
if debugger.ArgDebug() {
|
if debugger.ArgDebug() {
|
||||||
log.Log(NOW, "INIT() gui debug == true")
|
log.Log(true, "INIT() gui debug == true")
|
||||||
} else {
|
} else {
|
||||||
log.Log(NOW, "INIT() gui debug == false")
|
log.Log(true, "INIT() gui debug == false")
|
||||||
}
|
}
|
||||||
|
|
||||||
me.dnsSleep = 500 * time.Millisecond
|
me.dnsSleep = 500 * time.Millisecond
|
||||||
|
@ -57,7 +60,7 @@ func init() {
|
||||||
|
|
||||||
me.artificialSleep = 0.4 // seems to need to exist or GTK crashes. TODO: fix andlabs plugin
|
me.artificialSleep = 0.4 // seems to need to exist or GTK crashes. TODO: fix andlabs plugin
|
||||||
me.artificialS = "blah"
|
me.artificialS = "blah"
|
||||||
log.Log(INFO, "init() me.artificialSleep =", me.artificialSleep)
|
log.Log(true, "init() me.artificialSleep =", me.artificialSleep)
|
||||||
log.Log(INFO, "init() me.artificialS =", me.artificialS)
|
log.Log(true, "init() me.artificialS =", me.artificialS)
|
||||||
log.Sleep(me.artificialSleep)
|
log.Sleep(me.artificialSleep)
|
||||||
}
|
}
|
||||||
|
|
57
errorBox.go
57
errorBox.go
|
@ -11,8 +11,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type errorBox struct {
|
type errorBox struct {
|
||||||
ready bool
|
name string // the problem name
|
||||||
hidden bool
|
|
||||||
|
|
||||||
parent *gui.Node
|
parent *gui.Node
|
||||||
group *gui.Node
|
group *gui.Node
|
||||||
|
@ -32,12 +31,9 @@ type anError struct {
|
||||||
status string
|
status string
|
||||||
|
|
||||||
kindLabel *gui.Node
|
kindLabel *gui.Node
|
||||||
actionLabel *gui.Node
|
|
||||||
ipLabel *gui.Node
|
ipLabel *gui.Node
|
||||||
statusLabel *gui.Node
|
statusLabel *gui.Node
|
||||||
button *gui.Node
|
button *gui.Node
|
||||||
|
|
||||||
problem *Problem
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewErrorBox(p *gui.Node, name string, ip string) *errorBox {
|
func NewErrorBox(p *gui.Node, name string, ip string) *errorBox {
|
||||||
|
@ -45,79 +41,40 @@ func NewErrorBox(p *gui.Node, name string, ip string) *errorBox {
|
||||||
eb = new(errorBox)
|
eb = new(errorBox)
|
||||||
eb.parent = p
|
eb.parent = p
|
||||||
eb.group = p.NewGroup(name)
|
eb.group = p.NewGroup(name)
|
||||||
eb.grid = eb.group.NewGrid("stuff", 5, 1)
|
eb.grid = eb.group.NewGrid("stuff", 4, 1)
|
||||||
|
|
||||||
eb.grid.NewLabel("Type")
|
eb.grid.NewLabel("Type")
|
||||||
eb.grid.NewLabel("Action")
|
|
||||||
eb.grid.NewLabel("IP")
|
eb.grid.NewLabel("IP")
|
||||||
eb.grid.NewLabel("Status")
|
eb.grid.NewLabel("Status")
|
||||||
eb.grid.NewLabel("")
|
eb.grid.NewLabel("")
|
||||||
|
|
||||||
eb.fixes = make(map[string]*anError)
|
eb.fixes = make(map[string]*anError)
|
||||||
eb.ready = true
|
|
||||||
return eb
|
return eb
|
||||||
}
|
}
|
||||||
|
|
||||||
func (eb *errorBox) Show() {
|
|
||||||
if eb == nil {return}
|
|
||||||
eb.hidden = false
|
|
||||||
eb.group.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (eb *errorBox) Hide() {
|
func (eb *errorBox) add(kind string, ip string) bool {
|
||||||
if eb == nil {return}
|
tmp := kind + " " + ip
|
||||||
eb.hidden = true
|
|
||||||
eb.group.Hide()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (eb *errorBox) Toggle() {
|
|
||||||
if eb == nil {return}
|
|
||||||
if eb.hidden {
|
|
||||||
eb.Show()
|
|
||||||
} else {
|
|
||||||
eb.Hide()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (eb *errorBox) Ready() bool {
|
|
||||||
if eb == nil {return false}
|
|
||||||
return eb.ready
|
|
||||||
}
|
|
||||||
|
|
||||||
func (eb *errorBox) addIPerror(kind ProblemType, action ActionType, ip string) bool {
|
|
||||||
if ! eb.Ready() {return false}
|
|
||||||
tmp := kind.String() + " " + ip
|
|
||||||
if eb.fixes[tmp] != nil {
|
if eb.fixes[tmp] != nil {
|
||||||
log.Log(WARN, "Error is already here", kind, ip)
|
log.Log(WARN, "Error is already here", kind, ip)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
anErr := new(anError)
|
anErr := new(anError)
|
||||||
|
anErr.kind = kind
|
||||||
anErr.aaaa = ip
|
anErr.aaaa = ip
|
||||||
|
|
||||||
anErr.kindLabel = eb.grid.NewLabel(kind.String())
|
anErr.kindLabel = eb.grid.NewLabel(kind)
|
||||||
anErr.actionLabel = eb.grid.NewLabel(action.String())
|
|
||||||
anErr.ipLabel = eb.grid.NewLabel(ip)
|
anErr.ipLabel = eb.grid.NewLabel(ip)
|
||||||
anErr.statusLabel = eb.grid.NewLabel("")
|
anErr.statusLabel = eb.grid.NewLabel("")
|
||||||
anErr.button = eb.grid.NewButton("Try to Fix", func() {
|
anErr.button = eb.grid.NewButton(kind, func() {
|
||||||
log.Log(WARN, "got", kind, "here. IP =", ip)
|
log.Log(WARN, "got", kind, "here. IP =", ip)
|
||||||
eb.fix(tmp)
|
eb.fix(tmp)
|
||||||
})
|
})
|
||||||
anErr.problem = new(Problem)
|
|
||||||
anErr.problem.kind = kind
|
|
||||||
anErr.problem.aaaa = ip
|
|
||||||
eb.fixes[tmp] = anErr
|
eb.fixes[tmp] = anErr
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// get all your problems!
|
|
||||||
func (eb *errorBox) Scan() []anError {
|
|
||||||
for s, thing := range eb.fixes {
|
|
||||||
log.Log(CHANGE, "Scan()", s, thing)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (eb *errorBox) fix(key string) bool {
|
func (eb *errorBox) fix(key string) bool {
|
||||||
if eb.fixes[key] == nil {
|
if eb.fixes[key] == nil {
|
||||||
log.Log(WARN, "Unknown error. could not find key =", key)
|
log.Log(WARN, "Unknown error. could not find key =", key)
|
||||||
|
|
18
fix.go
18
fix.go
|
@ -4,7 +4,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
"go.wit.com/gui/cloudflare"
|
"go.wit.com/gui/cloudflare"
|
||||||
"go.wit.com/apps/control-panel-dns/smartwindow"
|
"go.wit.com/control-panels/dns/smartwindow"
|
||||||
)
|
)
|
||||||
|
|
||||||
func fix() bool {
|
func fix() bool {
|
||||||
|
@ -84,8 +84,7 @@ func fixIPv6dns() bool {
|
||||||
} else {
|
} else {
|
||||||
broken = true
|
broken = true
|
||||||
log.Log(INFO, "DNS AAAA is not in OS", aaaa)
|
log.Log(INFO, "DNS AAAA is not in OS", aaaa)
|
||||||
// addToFixWindow("DELETE", aaaa)
|
addToFixWindow("DELETE", aaaa)
|
||||||
me.problems.addIPerror(RR, DELETE, aaaa)
|
|
||||||
/*
|
/*
|
||||||
if deleteFromDNS(aaaa) {
|
if deleteFromDNS(aaaa) {
|
||||||
log.Log(INFO, "Delete AAAA", aaaa, "Worked")
|
log.Log(INFO, "Delete AAAA", aaaa, "Worked")
|
||||||
|
@ -151,10 +150,19 @@ func exists(m map[string]bool, s string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var myErrorBox *errorBox
|
||||||
|
|
||||||
func addToFixWindow(t string, ip string) {
|
func addToFixWindow(t string, ip string) {
|
||||||
log.Log(INFO, "addToFixWindow() START")
|
log.Log(INFO, "addToFixWindow() START")
|
||||||
if ! me.problems.Ready() { return }
|
if me.fixWindow == nil {
|
||||||
me.problems.addIPerror(RR, CREATE, ip)
|
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)
|
||||||
log.Log(INFO, "addToFixWindow() END")
|
log.Log(INFO, "addToFixWindow() END")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -1,3 +1,3 @@
|
||||||
module go.wit.com/apps/control-panel-dns
|
module go.wit.com/control-panels/dns
|
||||||
|
|
||||||
go 1.21.4
|
go 1.21.4
|
||||||
|
|
60
gui.go
60
gui.go
|
@ -12,7 +12,7 @@ import (
|
||||||
"go.wit.com/gui/cloudflare"
|
"go.wit.com/gui/cloudflare"
|
||||||
"go.wit.com/gui/debugger"
|
"go.wit.com/gui/debugger"
|
||||||
"go.wit.com/gui/gadgets/logsettings"
|
"go.wit.com/gui/gadgets/logsettings"
|
||||||
"go.wit.com/apps/control-panel-dns/smartwindow"
|
"go.wit.com/control-panels/dns/smartwindow"
|
||||||
)
|
)
|
||||||
|
|
||||||
// This setups up the dns control panel window
|
// This setups up the dns control panel window
|
||||||
|
@ -81,16 +81,41 @@ func myDefaultExit(n *gui.Node) {
|
||||||
|
|
||||||
func mainWindow(title string) {
|
func mainWindow(title string) {
|
||||||
me.window = gadgets.NewBasicWindow(me.myGui, title)
|
me.window = gadgets.NewBasicWindow(me.myGui, title)
|
||||||
me.window.Vertical()
|
|
||||||
|
|
||||||
hbox := me.window.Box().NewBox("bw hbox", true)
|
gr := me.window.Box().NewGroup("dns update")
|
||||||
|
|
||||||
statusGrid(hbox)
|
// 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()
|
||||||
|
})
|
||||||
|
|
||||||
// some artificial padding to make the last row of buttons look less wierd
|
statusGrid(me.window.Box())
|
||||||
gr := hbox.NewGroup("Development and Debugging Windows")
|
|
||||||
gr = gr.NewBox("vbox", false)
|
|
||||||
|
|
||||||
|
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 () {
|
gr.NewButton("Debug", func () {
|
||||||
me.debug.Toggle()
|
me.debug.Toggle()
|
||||||
})
|
})
|
||||||
|
@ -104,14 +129,12 @@ func mainWindow(title string) {
|
||||||
}
|
}
|
||||||
myLS.Toggle()
|
myLS.Toggle()
|
||||||
})
|
})
|
||||||
|
gr.NewButton("Show Errors", func () {
|
||||||
gr.NewButton("test smartwindow()", func () {
|
|
||||||
log.Jeff(INFO, "jcarr")
|
|
||||||
if me.fixWindow == nil {
|
if me.fixWindow == nil {
|
||||||
me.fixWindow = smartwindow.New()
|
me.fixWindow = smartwindow.New()
|
||||||
me.fixWindow.SetParent(me.myGui)
|
me.fixWindow.SetParent(me.myGui)
|
||||||
me.fixWindow.Title("smart window test")
|
me.fixWindow.Title("fix window")
|
||||||
me.fixWindow.SetDraw(testSmartWindow)
|
me.fixWindow.SetDraw(drawFixWindow)
|
||||||
me.fixWindow.Vertical()
|
me.fixWindow.Vertical()
|
||||||
me.fixWindow.Make()
|
me.fixWindow.Make()
|
||||||
me.fixWindow.Draw()
|
me.fixWindow.Draw()
|
||||||
|
@ -120,16 +143,6 @@ func mainWindow(title string) {
|
||||||
}
|
}
|
||||||
me.fixWindow.Toggle()
|
me.fixWindow.Toggle()
|
||||||
})
|
})
|
||||||
|
|
||||||
gr.NewButton("Show Errors", func () {
|
|
||||||
me.problems.Toggle()
|
|
||||||
})
|
|
||||||
me.autofix = gr.NewCheckbox("Auto-correct Errors")
|
|
||||||
me.autofix.Set(false)
|
|
||||||
|
|
||||||
// These are your problems
|
|
||||||
me.problems = NewErrorBox(me.window.Box(), "Errors", "has problems?")
|
|
||||||
me.problems.addIPerror(RR, USER, "1:1:1:1")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,4 +188,7 @@ func statusGrid(n *gui.Node) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
n.NewGroup("NOTES")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -224,6 +224,27 @@ func (hs *hostnameStatus) existsAAAA(s string) bool {
|
||||||
return false
|
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 {
|
func (hs *hostnameStatus) GetIPv6() []string {
|
||||||
if ! hs.Ready() { return nil}
|
if ! hs.Ready() { return nil}
|
||||||
return strings.Split(hs.dnsAAAA.Get(), "\n")
|
return strings.Split(hs.dnsAAAA.Get(), "\n")
|
||||||
|
@ -301,21 +322,10 @@ func (hs *hostnameStatus) updateStatus() {
|
||||||
hs.status.Set("BROKEN")
|
hs.status.Set("BROKEN")
|
||||||
}
|
}
|
||||||
|
|
||||||
last := hs.statusIPv6.Get()
|
|
||||||
if hs.verifyIPv6() {
|
if hs.verifyIPv6() {
|
||||||
if last != "WORKING" {
|
hs.statusIPv6.Set("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 {
|
} else {
|
||||||
if last != "BROKEN" {
|
hs.statusIPv6.Set("BROKEN")
|
||||||
log.Log(CHANGE, "Your DNS entries for IPv6 have BROKEN")
|
|
||||||
hs.changed = true
|
|
||||||
hs.statusIPv6.Set("BROKEN")
|
|
||||||
me.DnsStatus.SetText("BROKEN")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,7 +357,6 @@ func (hs *hostnameStatus) verifyIPv6() bool {
|
||||||
} else {
|
} else {
|
||||||
working = false
|
working = false
|
||||||
log.Log(INFO, "DNS AAAA is not in OS", aaaa)
|
log.Log(INFO, "DNS AAAA is not in OS", aaaa)
|
||||||
addToFixWindow("DELETE", aaaa)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,7 +366,6 @@ func (hs *hostnameStatus) verifyIPv6() bool {
|
||||||
} else {
|
} else {
|
||||||
working = false
|
working = false
|
||||||
log.Log(INFO, "OS AAAA is not in DNS", aaaa)
|
log.Log(INFO, "OS AAAA is not in DNS", aaaa)
|
||||||
addToFixWindow("CREATE", aaaa)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
110
ipv6box.go
110
ipv6box.go
|
@ -1,110 +0,0 @@
|
||||||
/*
|
|
||||||
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() {
|
|
||||||
}
|
|
|
@ -8,31 +8,33 @@ import (
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
var NOW *log.LogFlag
|
var NOW log.LogFlag
|
||||||
var INFO *log.LogFlag
|
var INFO log.LogFlag
|
||||||
var NET *log.LogFlag
|
var NET log.LogFlag
|
||||||
var DNS *log.LogFlag
|
var DNS log.LogFlag
|
||||||
|
var PROC log.LogFlag
|
||||||
|
var SPEW log.LogFlag
|
||||||
|
var WARN log.LogFlag
|
||||||
|
var CHANGE log.LogFlag
|
||||||
|
var STATUS log.LogFlag
|
||||||
|
|
||||||
var PROC *log.LogFlag
|
func myreg(f *log.LogFlag, b bool, name string, desc string) {
|
||||||
var SPEW *log.LogFlag
|
f.B = b
|
||||||
var WARN *log.LogFlag
|
f.Subsystem = "go.wit.com/control-panels/dns/linuxstatus"
|
||||||
|
f.Short = "linux"
|
||||||
var CHANGE *log.LogFlag
|
f.Desc = desc
|
||||||
var STATUS *log.LogFlag
|
f.Name = name
|
||||||
|
f.Register()
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
full := "go.wit.com/control-panels/dns/linuxstatus"
|
myreg(&NOW, true, "NOW", "temp debugging stuff")
|
||||||
short := "linux"
|
myreg(&INFO, false, "INFO", "normal debugging stuff")
|
||||||
|
myreg(&NET, false, "NET", "Network Logging")
|
||||||
NOW = log.NewFlag( "NOW", true, full, short, "temp debugging stuff")
|
myreg(&DNS, false, "DNS", "dnsStatus.update()")
|
||||||
INFO = log.NewFlag("INFO", false, full, short, "normal debugging stuff")
|
myreg(&PROC, false, "PROC", "/proc logging")
|
||||||
NET = log.NewFlag( "NET", false, full, short, "Network logging")
|
myreg(&SPEW, false, "SPEW", "spew stuff")
|
||||||
DNS = log.NewFlag( "DNS", false, full, short, "dnsStatus.update()")
|
myreg(&WARN, true, "WARN", "bad things")
|
||||||
|
myreg(&CHANGE, true, "CHANGE", "show droplet state changes")
|
||||||
PROC = log.NewFlag("PROC", false, full, short, "/proc loggging")
|
myreg(&STATUS, false, "STATUS", "Update() details")
|
||||||
WARN = log.NewFlag("WARN", true, full, short, "bad things")
|
|
||||||
SPEW = log.NewFlag("SPEW", false, full, short, "spew stuff")
|
|
||||||
|
|
||||||
CHANGE = log.NewFlag("CHANGE", true, full, short, "when host or dns change")
|
|
||||||
STATUS = log.NewFlag("STATUS", false, full, short, "Update() details")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,7 +195,7 @@ func scanInterfaces() {
|
||||||
switch v := addr.(type) {
|
switch v := addr.(type) {
|
||||||
case *net.IPNet:
|
case *net.IPNet:
|
||||||
if checkIP(v, i) {
|
if checkIP(v, i) {
|
||||||
log.Log(NET, "scanInterfaces() IP is new () i =", v.IP.String())
|
log.Log(true, "scanInterfaces() IP is new () i =", v.IP.String())
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
log.Log(NET, "\t\taddr.(type) = NO IDEA WHAT TO DO HERE v =", v)
|
log.Log(NET, "\t\taddr.(type) = NO IDEA WHAT TO DO HERE v =", v)
|
||||||
|
|
28
main.go
28
main.go
|
@ -14,7 +14,7 @@ import (
|
||||||
"go.wit.com/gui/gui"
|
"go.wit.com/gui/gui"
|
||||||
"go.wit.com/gui/debugger"
|
"go.wit.com/gui/debugger"
|
||||||
|
|
||||||
"go.wit.com/apps/control-panel-dns/linuxstatus"
|
"go.wit.com/control-panels/dns/linuxstatus"
|
||||||
|
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
|
@ -35,14 +35,10 @@ func main() {
|
||||||
me.ipv4s = make(map[string]dns.RR)
|
me.ipv4s = make(map[string]dns.RR)
|
||||||
me.ipv6s = make(map[string]dns.RR)
|
me.ipv6s = make(map[string]dns.RR)
|
||||||
|
|
||||||
if args.TmpLog {
|
// send all log() output to a file in /tmp
|
||||||
// send all log() output to a file in /tmp
|
log.SetTmp()
|
||||||
log.SetTmp()
|
|
||||||
}
|
|
||||||
|
|
||||||
me.myGui = gui.New()
|
me.myGui = gui.New().Default()
|
||||||
me.myGui.InitEmbed(resToolkit)
|
|
||||||
me.myGui.Default()
|
|
||||||
|
|
||||||
log.Sleep(me.artificialSleep)
|
log.Sleep(me.artificialSleep)
|
||||||
setupControlPanelWindow()
|
setupControlPanelWindow()
|
||||||
|
@ -132,29 +128,23 @@ func main() {
|
||||||
|
|
||||||
// check the four known things to see if they are all WORKING
|
// check the four known things to see if they are all WORKING
|
||||||
myTicker(10 * time.Second, "MAIN LOOP", func() {
|
myTicker(10 * time.Second, "MAIN LOOP", func() {
|
||||||
var working bool = true
|
|
||||||
if me.hostnameStatus.GetText() != "WORKING" {
|
if me.hostnameStatus.GetText() != "WORKING" {
|
||||||
log.Log(CHANGE, "The hostname is not WORKING yet", me.hostnameStatus.GetText())
|
log.Log(CHANGE, "The hostname is not WORKING yet", me.hostnameStatus.GetText())
|
||||||
working = false
|
return
|
||||||
}
|
}
|
||||||
if me.statusIPv6.Get() != "WORKING" {
|
if me.statusIPv6.Get() != "WORKING" {
|
||||||
log.Log(CHANGE, "IPv6 DNS lookup has not been confirmed yet", me.statusIPv6.Get())
|
log.Log(CHANGE, "IPv6 DNS lookup has not been confirmed yet", me.statusIPv6.Get())
|
||||||
working = false
|
return
|
||||||
}
|
}
|
||||||
if me.DnsStatus.GetText() != "WORKING" {
|
if me.DnsStatus.GetText() != "WORKING" {
|
||||||
log.Log(CHANGE, "Your IPv6 DNS settings have not been confirmed yet", me.DnsStatus.GetText())
|
log.Log(CHANGE, "Your IPv6 DNS settings have not been confirmed yet", me.DnsStatus.GetText())
|
||||||
working = false
|
return
|
||||||
}
|
}
|
||||||
if me.DnsAPIstatus.GetText() != "WORKING" {
|
if me.DnsAPIstatus.GetText() != "WORKING" {
|
||||||
log.Log(CHANGE, "The DNS API provider is not yet working", me.DnsAPIstatus.GetText())
|
log.Log(CHANGE, "The DNS API provider is not yet working", me.DnsAPIstatus.GetText())
|
||||||
working = false
|
return
|
||||||
}
|
|
||||||
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. scanning errors:")
|
|
||||||
me.problems.Scan()
|
|
||||||
}
|
}
|
||||||
|
log.Log(CHANGE, "EVERYTHING IS WORKING. YOU HAVE IPv6 BLISS. TODO: don't check so often now")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
82
problems.go
82
problems.go
|
@ -1,82 +0,0 @@
|
||||||
// this defines the kinds of problems that can be detected
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ProblemType int
|
|
||||||
type ActionType int
|
|
||||||
|
|
||||||
type Problem struct {
|
|
||||||
kind ProblemType
|
|
||||||
action ActionType
|
|
||||||
|
|
||||||
id int
|
|
||||||
Name string
|
|
||||||
desc string
|
|
||||||
value string
|
|
||||||
aaaa string
|
|
||||||
fixed bool
|
|
||||||
duration *time.Duration
|
|
||||||
}
|
|
||||||
|
|
||||||
var IPcreate = Problem {
|
|
||||||
kind: RR,
|
|
||||||
action: CREATE,
|
|
||||||
desc: "This RR entry in the zonefile needs to be removed",
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
var hostname Problem = (
|
|
||||||
kind: ProblemType.OS,
|
|
||||||
action: ActionType.CREATE,
|
|
||||||
Name: "Your /etc/hostname file is incorrect",
|
|
||||||
fixed: false,
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
|
|
||||||
const (
|
|
||||||
OS ProblemType = iota
|
|
||||||
ETC
|
|
||||||
RESOLVE
|
|
||||||
RR
|
|
||||||
PING
|
|
||||||
LOOKUP
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
USER ActionType = iota
|
|
||||||
CREATE
|
|
||||||
DELETE
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s Problem) String() string {
|
|
||||||
return s.Name
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s ProblemType) String() string {
|
|
||||||
switch s {
|
|
||||||
case OS:
|
|
||||||
return "OS"
|
|
||||||
case RR:
|
|
||||||
return "RR"
|
|
||||||
default:
|
|
||||||
return "something"
|
|
||||||
}
|
|
||||||
return "someprob"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s ActionType) String() string {
|
|
||||||
switch s {
|
|
||||||
case USER:
|
|
||||||
return "USER"
|
|
||||||
case CREATE:
|
|
||||||
return "CREATE"
|
|
||||||
case DELETE:
|
|
||||||
return "DELETE"
|
|
||||||
default:
|
|
||||||
return "something"
|
|
||||||
}
|
|
||||||
return "someprob"
|
|
||||||
}
|
|
|
@ -8,17 +8,23 @@ import (
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
var NOW *log.LogFlag
|
var NOW log.LogFlag
|
||||||
var INFO *log.LogFlag
|
var INFO log.LogFlag
|
||||||
var SPEW *log.LogFlag
|
var SPEW log.LogFlag
|
||||||
var WARN *log.LogFlag
|
var WARN log.LogFlag
|
||||||
|
|
||||||
|
func myreg(f *log.LogFlag, b bool, name string, desc string) {
|
||||||
|
f.B = b
|
||||||
|
f.Subsystem = "go.wit.com/gadgets/smartwindow"
|
||||||
|
f.Short = "smartWin"
|
||||||
|
f.Desc = desc
|
||||||
|
f.Name = name
|
||||||
|
f.Register()
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
full := "go.wit.com/gui/gadgets/smartwindow"
|
myreg(&NOW, true, "NOW", "temp debugging stuff")
|
||||||
short := "smartWin"
|
myreg(&INFO, false, "INFO", "normal debugging stuff")
|
||||||
|
myreg(&SPEW, false, "SPEW", "spew stuff")
|
||||||
NOW = log.NewFlag( "NOW", true, full, short, "temp debugging stuff")
|
myreg(&WARN, true, "WARN", "bad things")
|
||||||
INFO = log.NewFlag("INFO", false, full, short, "General Info")
|
|
||||||
SPEW = log.NewFlag("SPEW", false, full, short, "spew stuff")
|
|
||||||
WARN = log.NewFlag("WARN", false, full, short, "bad things")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,8 @@ 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/apps/control-panel-dns/linuxstatus"
|
"go.wit.com/control-panels/dns/linuxstatus"
|
||||||
"go.wit.com/apps/control-panel-dns/smartwindow"
|
"go.wit.com/control-panels/dns/smartwindow"
|
||||||
|
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
|
@ -63,9 +63,6 @@ type Host struct {
|
||||||
witcom *gadgets.BasicWindow
|
witcom *gadgets.BasicWindow
|
||||||
fixButton *gui.Node
|
fixButton *gui.Node
|
||||||
fixWindow *smartwindow.SmartWindow
|
fixWindow *smartwindow.SmartWindow
|
||||||
|
|
||||||
problems *errorBox
|
|
||||||
autofix *gui.Node
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type IPtype struct {
|
type IPtype struct {
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
// testing the smart window
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go.wit.com/log"
|
|
||||||
// "go.wit.com/gui/cloudflare"
|
|
||||||
"go.wit.com/apps/control-panel-dns/smartwindow"
|
|
||||||
)
|
|
||||||
|
|
||||||
func testSmartWindow(sw *smartwindow.SmartWindow) {
|
|
||||||
log.Log(WARN, "testSmartWindow() START")
|
|
||||||
grid := sw.Box().NewGrid("test", 5, 1)
|
|
||||||
grid.NewLabel("test 1")
|
|
||||||
grid.NewLabel("test 1")
|
|
||||||
grid.NewLabel("test 2")
|
|
||||||
grid.NewLabel("test 2")
|
|
||||||
grid.NewLabel("test 3")
|
|
||||||
grid.NewLabel("test 3")
|
|
||||||
grid.NewLabel("test 3")
|
|
||||||
grid.NewLabel("test 3")
|
|
||||||
}
|
|
Loading…
Reference in New Issue