From 1901c414b7506d061d51ff945d9611d3d97a2869 Mon Sep 17 00:00:00 2001
From: Thomas Schneider <thomas@fsmpi.rwth-aachen.de>
Date: Sat, 2 Jul 2022 14:49:38 +0200
Subject: [PATCH] Present(): Search existing record and only create if none
 exists

---
 main.go | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/main.go b/main.go
index ae97728..15f4208 100644
--- a/main.go
+++ b/main.go
@@ -39,14 +39,30 @@ func (s *solver) Present(ch *whapi.ChallengeRequest) error {
 
 	txt := fmt.Sprintf(`%s IN TXT "%s"`, ch.ResolvedFQDN, ch.Key)
 
-	record, err := client.CreateRecord(txt)
+	search := ch.ResolvedFQDN + " *"
+	records, err := client.ListRecords(nil, &search)
+	if err != nil {
+		klog.Error(err)
+		return err
+	}
+
+	var record rwthdns.Record
+
+	if len(records) == 0 {
+		record, err = client.CreateRecord(txt)
+	} else if len(records) == 1 {
+		record, err = client.UpdateRecord(records[0].Id, txt)
+	} else {
+		err = fmt.Errorf("More than one search result for %s", ch.ResolvedFQDN)
+	}
 
-	klog.V(2).Infof("record %+v", record)
 	if err != nil {
 		klog.Error(err)
 		return err
 	}
 
+	klog.V(2).Infof("record %+v", record)
+
 	zone, err := client.DeployZone(record.ZoneId)
 	klog.V(2).Infof("deployed zone %+v", zone)
 	if err != nil {
-- 
GitLab