summaryrefslogtreecommitdiff
path: root/cloudflare/rr.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-12-28 09:43:45 -0600
committerJeff Carr <[email protected]>2023-12-28 09:43:45 -0600
commit6fa6d6dfc9e5a88e7dff2ed3c148b3b4271f566c (patch)
treef08edaac07ddf1a2e8a7401ef32c53707bdf5537 /cloudflare/rr.go
parent73b0cee93320bb5b572881cd1a5ba9d878a4ba3a (diff)
Detect that a VPN is needed
IPv6() returns true if it's working display duration a 'DNS Lookup Status' window actual dig results display status and failure counters count lookup failures and successes add TCP dns lookup logic to test if dns is working at all add DNS over HTTPS cloudflare new & update kind of working holy shit, go.wit.com finally works with git mod tidy working, but cloudflare api stuff is broken AAAA '(none)' logic detection is better cloudflare control panel display the working real AAAA addresses Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'cloudflare/rr.go')
-rw-r--r--cloudflare/rr.go157
1 files changed, 157 insertions, 0 deletions
diff --git a/cloudflare/rr.go b/cloudflare/rr.go
new file mode 100644
index 0000000..05065b2
--- /dev/null
+++ b/cloudflare/rr.go
@@ -0,0 +1,157 @@
+/*
+ This will let you edit a single Resource Record within
+ a DNS zone file. For example:
+ google-dns.wit.com. 1 IN A 8.8.8.8
+*/
+
+package cloudflare
+
+import (
+ "log"
+ "os"
+
+ "go.wit.com/gui"
+)
+
+func init() {
+ Config = make(map[string]*ConfigT)
+}
+
+func CreateRR(myGui *gui.Node, zone string, zoneID string) {
+ if (CFdialog.cloudflareW != nil) {
+ // skip this if the window has already been created
+ log.Println("createRR() the cloudflare window already exists")
+ CFdialog.cloudflareB.Disable()
+ return
+ }
+ CFdialog.cloudflareW = myGui.NewWindow("cloudflare " + zone + " API")
+ CFdialog.cloudflareW.Custom = func () {
+ log.Println("createRR() don't really exit here")
+ CFdialog.cloudflareW = nil
+ CFdialog.cloudflareB.Enable()
+ }
+
+ group := CFdialog.cloudflareW.NewGroup("Create a new DNS Resource Record (rr)")
+
+ // make a grid 2 things wide
+ grid := group.NewGrid("gridnuts", 2, 3)
+
+ grid.NewLabel("zone")
+ CFdialog.zoneNode = grid.NewLabel("zone")
+ CFdialog.zoneNode.SetText(zone)
+
+ grid.NewLabel("zone ID")
+ CFdialog.zoneIdNode = grid.NewLabel("zoneID")
+ CFdialog.zoneIdNode.SetText(zoneID)
+
+ grid.NewLabel("shell env $CF_API_EMAIL")
+ CFdialog.emailNode = grid.NewLabel("type")
+ CFdialog.emailNode.SetText(os.Getenv("CF_API_EMAIL"))
+
+ grid.NewLabel("shell env $CF_API_KEY")
+ CFdialog.apiNode = grid.NewLabel("type")
+ CFdialog.apiNode.SetText(os.Getenv("CF_API_KEY"))
+
+ grid.NewLabel("Resource Record ID")
+ CFdialog.rrNode = grid.NewLabel("type")
+ CFdialog.rrNode.SetText(os.Getenv("cloudflare RR id"))
+
+ grid.NewLabel("Record Type")
+ CFdialog.TypeNode = grid.NewCombobox("type")
+ CFdialog.TypeNode.AddText("A")
+ CFdialog.TypeNode.AddText("AAAA")
+ CFdialog.TypeNode.AddText("CNAME")
+ CFdialog.TypeNode.AddText("TXT")
+ CFdialog.TypeNode.AddText("MX")
+ CFdialog.TypeNode.AddText("NS")
+ CFdialog.TypeNode.Custom = func () {
+ DoChange()
+ }
+ CFdialog.TypeNode.SetText("AAAA")
+
+ grid.NewLabel("Name (usually the hostname)")
+ CFdialog.NameNode = grid.NewCombobox("name")
+ CFdialog.NameNode.AddText("www")
+ CFdialog.NameNode.AddText("mail")
+ CFdialog.NameNode.AddText("git")
+ CFdialog.NameNode.AddText("go")
+ CFdialog.NameNode.AddText("blog")
+ CFdialog.NameNode.AddText("ns1")
+ CFdialog.NameNode.Custom = func () {
+ DoChange()
+ }
+ CFdialog.NameNode.SetText("www")
+
+ grid.NewLabel("Cloudflare Proxy")
+ CFdialog.proxyNode = grid.NewDropdown("proxy")
+ CFdialog.proxyNode.AddText("On")
+ CFdialog.proxyNode.AddText("Off")
+ CFdialog.proxyNode.Custom = func () {
+ DoChange()
+ }
+ CFdialog.proxyNode.SetText("Off")
+
+ grid.NewLabel("Value")
+ CFdialog.ValueNode = grid.NewCombobox("value")
+ CFdialog.ValueNode.AddText("127.0.0.1")
+ CFdialog.ValueNode.AddText("2001:4860:4860::8888")
+ CFdialog.ValueNode.AddText("ipv6.wit.com")
+ CFdialog.ValueNode.Custom = func () {
+ DoChange()
+ }
+ CFdialog.ValueNode.SetText("127.0.0.1")
+ CFdialog.ValueNode.Expand()
+
+ grid.NewLabel("URL")
+ CFdialog.urlNode = grid.NewLabel("URL")
+
+ group.NewLabel("curl")
+ CFdialog.curlNode = group.NewTextbox("curl")
+ CFdialog.curlNode.Custom = func () {
+ DoChange()
+ }
+ CFdialog.curlNode.SetText("put the curl text here")
+
+ CFdialog.resultNode = group.NewTextbox("result")
+ CFdialog.resultNode.SetText("API response will show here")
+
+ CFdialog.SaveNode = group.NewButton("Save curlPost()", func () {
+ dnsRow := DoChange()
+ result := curlPost(dnsRow)
+ CFdialog.resultNode.SetText(result)
+ // CreateCurlRR()
+ // url, data := CreateCurlRR()
+ // result := curl(url, data)
+ // CFdialog.resultNode.SetText(result)
+ })
+ // CFdialog.saveNode.Disable()
+ group.NewButton("New RR doCurl(PUT)", func () {
+ rr := DoChange()
+
+ rr.url = "https://api.cloudflare.com/client/v4/zones/" + rr.ZoneID + "/dns_records"
+
+ result := doCurl("POST", rr)
+ CFdialog.resultNode.SetText(result)
+
+ pretty, _ := FormatJSON(result)
+ log.Println(pretty)
+ })
+
+ group.NewButton("Update RR doCurl(PUT)", func () {
+ rr := DoChange()
+
+ rr.url = "https://api.cloudflare.com/client/v4/zones/" + rr.ZoneID + "/dns_records/" + rr.ID
+
+ result := doCurl("PUT", rr)
+ CFdialog.resultNode.SetText(result)
+
+ pretty, _ := FormatJSON(result)
+ log.Println(pretty)
+ })
+ // CFdialog.saveNode.Disable()
+
+
+ group.Pad()
+ grid.Pad()
+ grid.Expand()
+}