summaryrefslogtreecommitdiff
path: root/rr.go
blob: 3dc9dee77f6482ff2d3dda6c839fb22cdcbde226 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
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/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()
}