122 lines
2.4 KiB
Go
122 lines
2.4 KiB
Go
package hetzner
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
)
|
|
|
|
func SendGetZones(token string, names ...string) []string {
|
|
client := &http.Client{}
|
|
|
|
var ids []string
|
|
|
|
for _, name := range names {
|
|
fmt.Println("Getting zone: ", name)
|
|
req, err := http.NewRequest("GET", "https://dns.hetzner.com/api/v1/zones?name="+name, nil)
|
|
req.Header.Add("Auth-API-Token", token)
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
respBody, _ := io.ReadAll(resp.Body)
|
|
|
|
fmt.Println("response Status : ", resp.Status)
|
|
var responseObject struct {
|
|
Zones []Zone
|
|
}
|
|
|
|
err = json.Unmarshal(respBody, &responseObject)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
ids = append(ids, responseObject.Zones[0].Id)
|
|
}
|
|
|
|
return ids
|
|
}
|
|
|
|
func SendGetRecords(token string, zoneId string) []Record {
|
|
client := &http.Client{}
|
|
|
|
req, err := http.NewRequest("GET", "https://dns.hetzner.com/api/v1/records?zone_id="+zoneId, nil)
|
|
req.Header.Add("Auth-API-Token", token)
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
fmt.Println("Failure : ", err)
|
|
}
|
|
|
|
respBody, _ := io.ReadAll(resp.Body)
|
|
|
|
fmt.Println("Response Status : ", resp.Status)
|
|
|
|
var responseObject struct {
|
|
Records []Record
|
|
}
|
|
|
|
err = json.Unmarshal(respBody, &responseObject)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Println("Records: ", responseObject.Records)
|
|
|
|
return responseObject.Records
|
|
}
|
|
|
|
func SendUpdateRecords(token string, records []Record) {
|
|
client := &http.Client{}
|
|
|
|
var recordsReq struct {
|
|
Records []Record `json:"records"`
|
|
}
|
|
|
|
recordsReq.Records = records
|
|
|
|
jsonReq, err := json.Marshal(recordsReq)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Println("Request: ", string(jsonReq))
|
|
|
|
req, err := http.NewRequest("PUT", "https://dns.hetzner.com/api/v1/records/bulk", bytes.NewBuffer(jsonReq))
|
|
req.Header.Add("Content-Type", "application/json")
|
|
req.Header.Add("Auth-API-Token", token)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
respBody, _ := ioutil.ReadAll(resp.Body)
|
|
|
|
fmt.Println("response Status: ", resp.Status)
|
|
fmt.Println("response Body: ", string(respBody))
|
|
|
|
var responseObject struct {
|
|
Records []Record `json:"records"`
|
|
FailedRecords []Record `json:"failed_records"`
|
|
}
|
|
|
|
err = json.Unmarshal(respBody, &responseObject)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if len(responseObject.FailedRecords) > 0 {
|
|
fmt.Println("Failed records: ", responseObject.FailedRecords)
|
|
panic("Failed to update records: " + string(respBody))
|
|
}
|
|
}
|