summaryrefslogtreecommitdiff
path: root/cloudflare
diff options
context:
space:
mode:
Diffstat (limited to 'cloudflare')
-rw-r--r--cloudflare/api.go26
-rw-r--r--cloudflare/durationSlider.go2
-rw-r--r--cloudflare/http.go49
-rw-r--r--cloudflare/mainWindow.go3
-rw-r--r--cloudflare/oneLiner.go42
-rw-r--r--cloudflare/rr.go (renamed from cloudflare/cloudflare.go)83
-rw-r--r--cloudflare/structs.go2
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