From b67b987b07dae6604249ad6889b9541366ee982b Mon Sep 17 00:00:00 2001 From: Tevildo Date: Sun, 14 Apr 2024 21:08:00 +0100 Subject: [PATCH] add dns package with func to set TXT record --- dns/dns.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 dns/dns.go diff --git a/dns/dns.go b/dns/dns.go new file mode 100644 index 0000000..136b83a --- /dev/null +++ b/dns/dns.go @@ -0,0 +1,44 @@ +package dns + +import ( + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/cert-manager/webhook-example/auth" +) + +var ( + baseUrl = "https://api.nearlyfreespeech.net" + authHeaderName = "X-NFSN-Authentication" +) + +func SetTXTRecord(domain string, resolvedFqdn string, key string, login string, apiKey string) error { + resolvedFqdn = strings.TrimSuffix(resolvedFqdn, domain) + requestUrl := fmt.Sprintf("%s/dns/%s", baseUrl, domain) + + values := url.Values{"name": {resolvedFqdn}, "type": {"TXT"}, "data": {key}} + body := values.Encode() + authHeader, err := auth.GetAuthHeader(login, apiKey, requestUrl, body) + if err != nil { + return err + } + + bodyReader := strings.NewReader(body) + req, err := http.NewRequest("POST", requestUrl, bodyReader) + if err != nil { + return err + } + + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + req.Header.Set(authHeaderName, authHeader) + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + return nil +}