2025-03-23 11:55:06 +01:00

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))
}
}