diff --git a/cloudflare.go b/cloudflare.go index e2b559f..accdf99 100644 --- a/cloudflare.go +++ b/cloudflare.go @@ -8,39 +8,6 @@ import ( "net/http" ) -func setAuthHeader(req *http.Request, apiKey string) { - authHeader := fmt.Sprint("bearer ", apiKey) - req.Header.Add("Authorization", authHeader) -} - -type cloudflareResponse struct { - Success bool - Result []struct { - ID string - Content string - Type string - } - Errors []struct { - Message string - } -} - -func checkServerErrors(data *cloudflareResponse) { - if data.Success { - return - } - - msg := "" - for i, err := range data.Errors { - if i != 0 { - msg += ", " - } - msg += err.Message - } - - log.Panic("Server responded with error: ", msg) -} - type dnsRecord struct { id string content string @@ -51,6 +18,11 @@ type DNSRecords struct { aaaa dnsRecord } +func setAuthHeader(req *http.Request, apiKey string) { + authHeader := fmt.Sprint("bearer ", apiKey) + req.Header.Add("Authorization", authHeader) +} + func GetDNSRecord(zoneID string, domainName string, apiKey string) DNSRecords { dnsRecords := DNSRecords{ name: domainName, @@ -71,12 +43,32 @@ func GetDNSRecord(zoneID string, domainName string, apiKey string) DNSRecords { defer resp.Body.Close() - var data cloudflareResponse + var data struct { + Success bool + Errors []struct { + Message string + } + Result []struct { + ID string + Content string + Type string + } + } err = json.NewDecoder(resp.Body).Decode(&data) if err != nil { log.Panic("Error parsing JSON: ", err) } - checkServerErrors(&data) + if !data.Success { + msg := "" + for i, err := range data.Errors { + if i != 0 { + msg += ", " + } + msg += err.Message + } + + log.Panic("Server responded with error: ", msg) + } for _, record := range data.Result { switch record.Type { @@ -125,10 +117,25 @@ func UpdateDNSRecord(zoneID string, dnsRecordID string, apiKey string, body DNSR defer resp.Body.Close() - var data cloudflareResponse + var data struct { + Success bool + Errors []struct { + Message string + } + } err = json.NewDecoder(resp.Body).Decode(&data) if err != nil { log.Fatal("Error parsing JSON: ", err) } - checkServerErrors(&data) + + if !data.Success { + msg := "" + for i, err := range data.Errors { + if i != 0 { + msg += ", " + } + msg += err.Message + } + log.Panic("Server responded with error: ", msg) + } } diff --git a/main.go b/main.go index 25f5b99..7d52cb8 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,9 @@ package main import ( + "fmt" "log" + "strings" "sync" "time" ) @@ -57,7 +59,32 @@ func getDNSRecords() []DNSRecords { return dnsRecords } +func initialize() { + fmt.Println(" _______ _______ ___ _ ___ _ ______") + fmt.Println(" / ___/ /__ __ _____/ / _/ /__ ________ / _ \\__ _____ ___ ___ _ (_)___ / _ \\/ |/ / __/") + fmt.Println("/ /__/ / _ \\/ // / _ / _/ / _ `/ __/ -_) / // / // / _ \\/ _ `/ ' \\/ / __/ / // / /\\ \\ ") + fmt.Println("\\___/_/\\___/\\_,_/\\_,_/_//_/\\_,_/_/ \\__/ /____/\\_, /_//_/\\_,_/_/_/_/_/\\__/ /____/_/|_/___/ ") + fmt.Println(" /___/ ") + + var recordType string + if UseIPv4() && UseIPv6() { + recordType = "A and AAAA" + } else if UseIPv4() { + recordType = "A" + } else if UseIPv6() { + recordType = "AAAA" + } + + domainNames := strings.Join(GetDomainNames(), ", ") + + interval := GetInterval() + + fmt.Printf("Updating %v records of %v every %v minutes\n\n", recordType, domainNames, interval) +} + func main() { + initialize() + for { var publicIP publicIP var dnsRecords []DNSRecords @@ -84,7 +111,7 @@ func main() { go func() { UpdateDNSRecord(zoneID, dnsRecord.a.id, apiKey, DNSRecordBody{Type: "A", Name: dnsRecord.name, Content: publicIP.v4}) - log.Printf("Set DNS record %v to %v", dnsRecord.name, publicIP.v4) + log.Printf("Set DNS A record %v to %v", dnsRecord.name, publicIP.v4) wg.Done() }() } @@ -93,7 +120,7 @@ func main() { go func() { UpdateDNSRecord(zoneID, dnsRecord.aaaa.id, apiKey, DNSRecordBody{Type: "AAAA", Name: dnsRecord.name, Content: publicIP.v6}) - log.Printf("Set DNS record %v to %v", dnsRecord.name, publicIP.v6) + log.Printf("Set DNS AAAA record %v to %v", dnsRecord.name, publicIP.v6) wg.Done() }() }