diff --git a/main.go b/main.go index ae97728b6480e6292ba708b21a32826ab8ef4edf..15f4208ec8ed3069f18c08f84e80cc040fe5995c 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 {