diff options
Diffstat (limited to 'cloudflare')
| -rw-r--r-- | cloudflare/api.go | 26 | ||||
| -rw-r--r-- | cloudflare/durationSlider.go | 2 | ||||
| -rw-r--r-- | cloudflare/http.go | 49 | ||||
| -rw-r--r-- | cloudflare/mainWindow.go | 3 | ||||
| -rw-r--r-- | cloudflare/oneLiner.go | 42 | ||||
| -rw-r--r-- | cloudflare/rr.go (renamed from cloudflare/cloudflare.go) | 83 | ||||
| -rw-r--r-- | cloudflare/structs.go | 2 |
7 files changed, 109 insertions, 98 deletions
diff --git a/cloudflare/api.go b/cloudflare/api.go index 1769f6b..036adc7 100644 --- a/cloudflare/api.go +++ b/cloudflare/api.go @@ -10,11 +10,20 @@ import ( "github.com/davecgh/go-spew/spew" ) +/* + This function should run each time + the user chanegs anything in the GUi + or each time something in general changes + + It returns a RR record which then can be + turned into JSON and sent via http + to cloudflare's API +*/ func DoChange() *RRT { var dnsRow *RRT dnsRow = new(RRT) - log.Println("Look for changes in row", dnsRow.ID) + log.Println("DoChange() START") if (CFdialog.proxyNode.S == "On") { dnsRow.Proxied = true } else { @@ -88,21 +97,6 @@ func SetRow(dnsRow *RRT) { log.Println("http PUT curl =", pretty) CFdialog.curlNode.SetText(pretty) } - - return - log.Println("UPDATE VALUE", CFdialog.NameNode.Name, CFdialog.TypeNode.Name, "to", CFdialog.ValueNode.S) - stuff, result := httpPut(dnsRow) - if (CFdialog.curlNode != nil) { - pretty, _ := FormatJSON(stuff) - log.Println("http PUT curl =", pretty) - CFdialog.curlNode.SetText(pretty) - } - if (CFdialog.resultNode != nil) { - pretty, _ := FormatJSON(result) - log.Println("http PUT result =", pretty) - CFdialog.resultNode.SetText(pretty) - } - // CFdialog.saveNode.Disable() } func GetZonefile(c *ConfigT) *DNSRecords { diff --git a/cloudflare/durationSlider.go b/cloudflare/durationSlider.go index 0d9559b..1ab0e50 100644 --- a/cloudflare/durationSlider.go +++ b/cloudflare/durationSlider.go @@ -9,6 +9,8 @@ import ( "go.wit.com/gui" ) +// TODO: use: https://github.com/robfig/cron/ + // ttl := cloudflare.DurationSlider(g2, "control panel TTL (in tenths of seconds)", 10 * time.Millisecond, 5 * time.Second) // ttl.Set(200 * time.Millisecond) diff --git a/cloudflare/http.go b/cloudflare/http.go index f258f61..1917c8b 100644 --- a/cloudflare/http.go +++ b/cloudflare/http.go @@ -3,7 +3,6 @@ package cloudflare import ( "log" - "fmt" "io/ioutil" "net/http" "bytes" @@ -27,45 +26,43 @@ curl --request POST \ }' */ -func httpPut(dnsRow *RRT) (string, string) { - var url string = cloudflareURL + dnsRow.ZoneID + "/dns_records/" + dnsRow.ID - var authKey string = dnsRow.Auth - var email string = dnsRow.Email - - var tmp string - tmp = makeJSON(dnsRow) - data := []byte(tmp) +func doCurl(method string, rr *RRT) string { + var err error + var req *http.Request - log.Println("http PUT url =", url) - // log.Println("http PUT data =", data) - // spew.Dump(data) - pretty, _ := FormatJSON(string(data)) - log.Println("http PUT data =", pretty) + data := []byte(rr.data) - req, err := http.NewRequest(http.MethodPut, url, bytes.NewBuffer(data)) + if (method == "PUT") { + req, err = http.NewRequest(http.MethodPut, rr.url, bytes.NewBuffer(data)) + } else { + req, err = http.NewRequest(http.MethodPost, rr.url, bytes.NewBuffer(data)) + } // Set headers req.Header.Set("Content-Type", "application/json") - req.Header.Set("X-Auth-Key", authKey) - req.Header.Set("X-Auth-Email", email) + req.Header.Set("X-Auth-Key", rr.Auth) + req.Header.Set("X-Auth-Email", rr.Email) + + log.Println("http PUT url =", rr.url) + log.Println("http PUT Auth =", rr.Auth) + log.Println("http PUT Email =", rr.Email) + log.Println("http PUT data =", rr.data) client := &http.Client{} resp, err := client.Do(req) if err != nil { log.Println(err) - return tmp, fmt.Sprintf("blah err =", err) + return "" } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Println(err) - return tmp, fmt.Sprintf("blah err =", err) + return "" } - // log.Println("http PUT body =", body) - // spew.Dump(body) - return tmp, string(body) + return string(body) } func curlPost(dnsRow *RRT) string { @@ -75,10 +72,10 @@ func curlPost(dnsRow *RRT) string { url := dnsRow.url tmp := dnsRow.data - log.Println("curl() START") - log.Println("curl() authkey = ", authKey) - log.Println("curl() email = ", email) - log.Println("curl() url = ", url) + log.Println("curlPost() START") + log.Println("curlPost() authkey = ", authKey) + log.Println("curlPost() email = ", email) + log.Println("curlPost() url = ", url) data := []byte(tmp) req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(data)) diff --git a/cloudflare/mainWindow.go b/cloudflare/mainWindow.go index dddb0b7..af5b221 100644 --- a/cloudflare/mainWindow.go +++ b/cloudflare/mainWindow.go @@ -9,7 +9,7 @@ import ( ) // This creates a window -func MakeCloudflareWindow(n *gui.Node) { +func MakeCloudflareWindow(n *gui.Node) *gui.Node { CFdialog.rootGui = n var t *gui.Node @@ -54,6 +54,7 @@ func MakeCloudflareWindow(n *gui.Node) { showCloudflareCredentials(more) makeDebugWindow(CFdialog.mainWindow) + return CFdialog.mainWindow } func makeConfigWindow(n *gui.Node) { diff --git a/cloudflare/oneLiner.go b/cloudflare/oneLiner.go new file mode 100644 index 0000000..5fc7a51 --- /dev/null +++ b/cloudflare/oneLiner.go @@ -0,0 +1,42 @@ +// This is a simple example +package cloudflare + +import ( + "log" + + "go.wit.com/gui" +) + +type OneLiner struct { + p *gui.Node // parent widget + l *gui.Node // label widget + v *gui.Node // value widget + + value string + label string + + Custom func() +} + +func (n *OneLiner) Set(value string) { + log.Println("OneLiner.Set() =", value) + n.v.Set(value) + n.value = value +} + +func NewOneLiner(n *gui.Node, name string) *OneLiner { + d := OneLiner { + p: n, + value: "", + } + + // various timeout settings + d.l = n.NewLabel(name) + d.v = n.NewLabel("") + d.v.Custom = func() { + d.value = d.v.S + log.Println("OneLiner.Custom() user changed value to =", d.value) + } + + return &d +} diff --git a/cloudflare/cloudflare.go b/cloudflare/rr.go index db98c92..05065b2 100644 --- a/cloudflare/cloudflare.go +++ b/cloudflare/rr.go @@ -1,4 +1,9 @@ -// This is a simple example +/* + 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 ( @@ -110,7 +115,7 @@ func CreateRR(myGui *gui.Node, zone string, zoneID string) { CFdialog.resultNode = group.NewTextbox("result") CFdialog.resultNode.SetText("API response will show here") - CFdialog.saveNode = group.NewButton("Save", func () { + CFdialog.SaveNode = group.NewButton("Save curlPost()", func () { dnsRow := DoChange() result := curlPost(dnsRow) CFdialog.resultNode.SetText(result) @@ -120,63 +125,33 @@ func CreateRR(myGui *gui.Node, zone string, zoneID string) { // CFdialog.resultNode.SetText(result) }) // CFdialog.saveNode.Disable() + group.NewButton("New RR doCurl(PUT)", func () { + rr := DoChange() - group.Pad() - grid.Pad() - grid.Expand() -} + rr.url = "https://api.cloudflare.com/client/v4/zones/" + rr.ZoneID + "/dns_records" -/* -func CreateCurlRR() (string, string) { - // enable the Save/Create Button - if (CFdialog.saveNode != nil) { - CFdialog.saveNode.Enable() - } + result := doCurl("POST", rr) + CFdialog.resultNode.SetText(result) - if (CFdialog.TypeNode != nil) { - CFdialog.Type = CFdialog.TypeNode.S - } - if (CFdialog.NameNode != nil) { - CFdialog.Name = CFdialog.NameNode.S - } - if (CFdialog.proxyNode != nil) { - if (CFdialog.proxyNode.S == "On") { - CFdialog.ProxyS = "true" - } else { - CFdialog.ProxyS = "false" - } - } - if (CFdialog.ValueNode != nil) { - CFdialog.Content = CFdialog.ValueNode.S - } - CFdialog.Ttl = "3600" + pretty, _ := FormatJSON(result) + log.Println(pretty) + }) - var url string = "https://api.cloudflare.com/client/v4/zones/" + CFdialog.ID + "/dns_records" - // https://api.cloudflare.com/client/v4/zones/zone_identifier/dns_records \ - // var authKey string = os.Getenv("CF_API_KEY") - // var email string = os.Getenv("CF_API_EMAIL") + group.NewButton("Update RR doCurl(PUT)", func () { + rr := DoChange() - // make a json record to send on port 80 to cloudflare - var tmp string - tmp = `{"content": "` + CFdialog.Content + `", ` - tmp += `"name": "` + CFdialog.Name + `", ` - tmp += `"type": "` + CFdialog.Type + `", ` - tmp += `"ttl": ` + CFdialog.Ttl + `, ` - tmp += `"proxied": ` + CFdialog.ProxyS + `, ` - tmp += `"comment": "WIT DNS Control Panel"` - tmp += `}` - data := []byte(tmp) + 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() - log.Println("http PUT url =", url) - // log.Println("http PUT data =", data) - // spew.Dump(data) - pretty, _ := FormatJSON(string(data)) - log.Println("http URL =", url) - log.Println("http PUT data =", pretty) - if (CFdialog.curlNode != nil) { - CFdialog.curlNode.SetText("URL: " + url + "\n" + pretty) - } - return url, tmp + group.Pad() + grid.Pad() + grid.Expand() } -*/ diff --git a/cloudflare/structs.go b/cloudflare/structs.go index f0a23d8..9efef62 100644 --- a/cloudflare/structs.go +++ b/cloudflare/structs.go @@ -50,7 +50,7 @@ type dialogT struct { ttlNode *gui.Node // just set to 1 which means automatic to cloudflare curlNode *gui.Node // shows you what you could run via curl resultNode *gui.Node // what the cloudflare API returned - saveNode *gui.Node // button to send it to cloudflare + SaveNode *gui.Node // button to send it to cloudflare zoneNode *gui.Node // "wit.com" zoneIdNode *gui.Node // cloudflare zone ID |
